OpenGL Vertex Shaders에서 W 란 무엇이며 왜 나누는가?
-
19-09-2019 - |
문제
void main(void)
{
vec4 clipCoord = glModelViewProjectionmatrix * gl_Vertex;
gl_Position = clipCoord;
gl_FrontColor = gl_Color;
vec3 ndc = clipCoord.xyz / clipCoord.w;
그래서 clipCoord
표준 고정 파이프 라인 변환을 수행하고 있습니다. 내가 왜 나누는가 w
, 그리고 나는 이것에서 무엇을 얻습니까?
해결책
W는 3 차원 정점의 네 번째 좌표이다. 이 정점은 균질 한 정점 좌표라고합니다.
몇 마디로, W 구성 요소는 다른 벡터 구성 요소를 나누는 요인입니다. w가 1.0 인 경우, 균질 한 정점 좌표는 "정규화"됩니다. 두 개의 정점을 비교하려면 W 값을 1.0으로 정규화해야합니다.
정점을 생각하십시오 (1,1,1,1). 이제 w 값을 증가시킵니다 (w> 1.0). 정규화 된 위치는 스케일링입니다! 그리고 그것은 기원으로 가고 있습니다. 정점을 생각하십시오 (1,1,1,1). 이제 w 값을 줄입니다 (w <1.0). 정규화 된 위치는 무한 지점으로 이동합니다.
정점 좌표를 스케일링하는 것 외에도 4x4 행렬 (모델보기 및/또는 투영 행렬)에 4x1 매트릭스 (정점)를 곱해야하므로 W 좌표가 필요합니다.
물론, 빨간 책은 확실한 가이드입니다.
제휴하지 않습니다 StackOverflow