버텍스 쉐이더에서 퍼스펙티브 매트릭스를 사용할 때 w로 나눌 코드를 작성해야합니까? 아니면 나중 단계에서 자동으로 수행됩니까?Perspecitve가 버텍스 쉐이더로 나눕니까?
내 질문에 대한 이유는 내가 사용 버텍스 쉐이더를 많이 본 것입니다 :
의 w 구성 요소 벡터를 분할 이후의 단계가있는 경우 의미가gl_Position = matrix * pos;
.
gl_Position = matrix * pos;
gl_Position = gl_Position/gl_Position.w;
되어 올바른 하나는 다른 설정이 누락 될 수있는 두 번째 예 :
그러나 나는 내 버텍스 쉐이더에서 다음 사용 때까지 일 없었어?다른 방법을 넣으십시오 : OpenGL Vertex transformation (첫 번째 이미지)에 표시된 단계 중 버텍스 쉐이더에 쓸 필요가있는 것은 무엇입니까?
저는 ModelView와 Projection 매트릭스가 거기에 속해 있는지 (또는 둘의 병합) 있는지 알고 있습니다. 뷰포트 변환은 버텍스 쉐이더의 일부가 아니지만, divide by w
은?
내 설정은 x/y/z의 좌표가 [-1 1] 이내 인 간단한 삼각형입니다.
원근감 행렬은 z = -1에서 -10 =, x = [- 1,1], y = [- 1,1]에 좌표를 투영한다고 가정합니다.
x, 0, a, 0
0, y, b, 0
0, 0, c, d
0, 0, 1, 0;
마지막 I는 = P * T는 번역 인 T (매트릭스 최종 매트릭스 생성 : 행렬 P하려면
x = 2.0f * zNear/(xMax - xMin);
y = 2.0f * zNear/(yMax - yMin);
a = -(xMax + xMin)/(xMax - xMin);
b = -(yMax + yMin)/(yMax - yMin);
c = (zFar + zNear)/(zNear - zFar);
d = -(2.0f * zFar * zNear)/(zNear - zFar);
:
-1.0 0.0 0.0 0.0
0.0 -1.0 0.0 0.0
0.0 0.0 -1.2 -2.2
0.0 0.0 1.0 0.0
그것은 의해 생성 된 0,0, -2)
나는 CPU에서 계산을 시도했지만 예상 결과를 생성하는 것으로 나타 났지만, 나도 수동으로 w로 나눕니다.
업데이트 : 해결하지만 난 (곱하기 -1) 행렬의 모든 구성 요소를 부정하고 지금은 작동
을 이해 필요. 위 예제는 또한 양과 음의 z 좌표를 투영 평면에 투영 할 때 문제가 발생했습니다.이 좌표는 또한이 변경으로 해결되었습니다.이 변경으로 인해 해결 된 모든 참조 또는 설명은 환영합니다.
나는 그 방정식을 어디서 얻었는지 아직 확실하지 않지만 gluPerspective를 보면 'd'값은 사용하는 것과 정확히 일치하지 않습니다. – Tim
수식은 처음부터 알 수없는 위의 행렬로 처음부터 파생되었습니다. – hultqvist