2009-02-26 3 views
3

나는 화면 공간을 변환하는 역 원근 투영

worldview_inverse * (projection_inverse * vector) 

을 사용하고 세계 공간 좌표로 조정합니다.

(x,y,-1,1) 

가까운 평면 상에 점으로 변환하고, 라인 내가보기에 모든 개체를 조회 할 수 있습니다를 연결하는 동안 나는

(x,y,1,1) 

이 (가) 멀리 떨어진면에 포인트로 변환한다고 가정 선이 교차하는 절두체. 변환 후 결과 포인트를 각각의 .w 구성 요소로 나눕니다. 이것은 먼 평면에서 작동하지만, 가까운 평면상의 점은 어떻게 든 우주 공간 원점으로 변환됩니다.

이것은 1의 w 구성 요소와 관련이 있다고 생각합니다. 일반적으로 역 투영에 들어가기 때문에 1, 투영 전에는 1, 이후에는 그렇지 않으므로 역 투영을 수행하기 때문입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

더 많은 샘플 코드가 필요하다고 생각합니다. 특히 근거리에 가까운 지점을 설정하는 부분 –

+0

또한 사용중인 투영 매트릭스를 제공 할 수 있습니까? 오프셋 되었습니까? – Coincoin

답변

4

나는 이것이 유일한 해결책이라는 것을 알고 있지만 원근감과보기 위치 만 사용하여 가까운 평면 점을 추론 할 수 있습니다.

near_point = view_position 
      + (far_point - view_position) * (near_distance/far_distance) 

진짜 문제는. 먼저, W로 나누는 것을 잊지 마세요! 또한, 당신의 투영 행렬에 따라 z = -1이 아닌 (x, y, 0,1) 시도해 보았습니까?

near_point = worldview_inverse * (projection_inverse * vector) 
near_point /= near_point.W 
+0

예, 이것을 고려했지만, 지금은 원래 문제의 수학 측면에 관심이 있습니다;) – heeen

+0

Hehe, 예, 그것에 대해 죄송합니다. 귀하의 실제 문제를 해결하기 위해 내 대답을 업데이트했습니다. – Coincoin