1
아래의 규칙에 의해 설명 된 3D 좌표에서 화면 좌표로 매핑하는 Three.js에서 투영 행렬을 만드는 방법은 무엇입니까?이런 종류의 매핑을 수행하는 Three.js에 투영 매트릭스를 설정하는 방법은 무엇입니까?
screen_x = x - z*0.5
screen_y = y - z*0.5
depth = z
아래의 규칙에 의해 설명 된 3D 좌표에서 화면 좌표로 매핑하는 Three.js에서 투영 행렬을 만드는 방법은 무엇입니까?이런 종류의 매핑을 수행하는 Three.js에 투영 매트릭스를 설정하는 방법은 무엇입니까?
screen_x = x - z*0.5
screen_y = y - z*0.5
depth = z
투영 행렬은 다음 식 나타냄 다른 모든 요소는 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,
이다.
고맙습니다. (그게 제가 시도한 것입니다.하지만 저는 Z 버퍼를 구현하지 않은 잘못된 렌더러를 사용하고있는 것으로 생각했습니다). 그래도 실제로 무슨 일이 일어 났는지 잘 알고있어 기쁩니다. wx와 wz 값에 대한 해석은 무엇입니까? 또한, 당신은 뭔가 잘못 생각해 냈습니다. 여기서 마지막 요소 ("1")는 실제로 실험 결과에 따라 전체 결과를 스케일링하기 위해 작동합니다. – MaiaVictor
wx, wy, wz 값만 해석 할 수 있지만 row0 + -row3은 왼쪽/오른쪽 클립면의 평면 방정식을 나타냅니다. row1 + -row3 : = 위쪽/아래쪽 평면의 방정식과 row2 + -row3은 뷰잉 절두체의 near/far 클립 평면 방정식입니다. 전체적으로 (x y z 1) * persp_Matrix는 뷰잉 프러스 텀 (clipped pyramid)을 _unit cube_로 변환합니다. 반대로 단일 벡터 - 행렬 곱셈은 점이 뷰 외부 또는 내부에 있는지 여부를 알려줍니다. –
xt, yt, zt 벡터가 0 인 경우에만 ww-term을 수정하여 비율을 조정할 수 있습니다. 보편적으로 올바른 방법은 ViewMatrix의 상위 3x3 벡터를 곱한 다음 결과에 (매우 희소 한) 투영 행렬을 곱하는 것입니다. (곱해진 후에는 스케일링이 VP 매트릭스 주위에 "뿌려지며"좌상 구석에만 절대 위치 할 수 없다고 생각합니다) –