문제

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 좌표가 필요합니다.

물론, 빨간 책은 확실한 가이드입니다.

빨간색 책 부록

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top