2012-12-27 4 views

답변

1

투영 행렬은 다음 식 나타냄 다른 모든 요소는 0이된다 것과

xx xy xz xt <- x' = (xx*x + xy*y + xz*z + xt)/(wx*x + wy*y + wz*z + 1) 
yx yy yz yt  y' = (yx*x + yy*y + yz*z + yt)/(wx*x + wy*y + wz*z + 1) 
zx zy zz zt  z' = (zx*x + zy*y + zz*z + zt)/(wx*x + wy*y + wz*z + 1) 
wx wy wz 1 

, 그러나

screen_x = x-z*0.5 : xx=1,  xz=-0.5 
screen_y = y-z*0.5 :  yy=1, xz=-0.5 
depth z'= z  :    zz=1  (and ww=1) 

EDIT이 아닌 일반적인 프로젝션 행렬 이 특정 문제에만 적용됩니다.

일반적인 [대칭] 투영 행렬은 x 및 y가 WX의 == * Z의 Z에 의해 분할되도록 다음있는 형태

a 0 0 d 
0 b 0 e 
0 0 c f 
0 0 1 0, 

이다.

+0

고맙습니다. (그게 제가 시도한 것입니다.하지만 저는 Z 버퍼를 구현하지 않은 잘못된 렌더러를 사용하고있는 것으로 생각했습니다). 그래도 실제로 무슨 일이 일어 났는지 잘 알고있어 기쁩니다. wx와 wz 값에 대한 해석은 무엇입니까? 또한, 당신은 뭔가 잘못 생각해 냈습니다. 여기서 마지막 요소 ("1")는 실제로 실험 결과에 따라 전체 결과를 스케일링하기 위해 작동합니다. – MaiaVictor

+0

wx, wy, wz 값만 해석 할 수 있지만 row0 + -row3은 왼쪽/오른쪽 클립면의 평면 방정식을 나타냅니다. row1 + -row3 : = 위쪽/아래쪽 평면의 방정식과 row2 + -row3은 뷰잉 절두체의 near/far 클립 평면 방정식입니다. 전체적으로 (x y z 1) * persp_Matrix는 뷰잉 프러스 텀 (clipped pyramid)을 _unit cube_로 변환합니다. 반대로 단일 벡터 - 행렬 곱셈은 점이 뷰 외부 또는 내부에 있는지 여부를 알려줍니다. –

+1

xt, yt, zt 벡터가 0 인 경우에만 ww-term을 수정하여 비율을 조정할 수 있습니다. 보편적으로 올바른 방법은 ViewMatrix의 상위 3x3 벡터를 곱한 다음 결과에 (매우 희소 한) 투영 행렬을 곱하는 것입니다. (곱해진 후에는 스케일링이 VP 매트릭스 주위에 "뿌려지며"좌상 구석에만 절대 위치 할 수 없다고 생각합니다) –

관련 문제