2013-07-20 2 views
0

많은 소스를 읽고, 함수를 다시 구현하고 행렬을 직접 연구함으로써 gluLookAt()가 역 눈 좌표로 변환 된 회전과 동일하다는 것을 배웠습니다. 구현은 OpenGL, MESA, Cogl 등에서 비슷합니다. 좋은 요약은 여기에 있습니다 : http://pic.dhe.ibm.com/infocenter/aix/v7r1/topic/com.ibm.aix.opengl/doc/openglrf/gluLookAt.htm내 gluLookAt() 오해에 대해 설명해 주시겠습니까?

그러나 look-at 대상이 원래 (0, 0, 0) , 가상 카메라가 Z 축에서 약간 오프셋됩니다 (예 : (2, 2, 10). gluLookAt()의 결과는 시야의 중심에 원점을 가져야합니다. 초기 회전 단계는 중요하지 않지만 이후의 변환 단계는 원점을 중심에서 멀리 이동시킵니다.

내 gluLookAt() 오해를 설명 할 수 있습니까?

답변

0

내하는 gluLookAt() 오해를 설명 할 수주십시오?

실수는 일련의 단계로 생각하는 데 있습니다. 그것이 작동하는 방식이 아닙니다. gluLookAt는 좌표를 원하는 방식으로 직접 매핑하는 변환 행렬을 계산합니다. "중간"회전 단계가 없습니다.

1

당신이 링크 된 문서는 참으로 잘못된 것입니다. 우리가 another documentation를 읽어보십시오

, 우리는 다음과 같이 뷰 행렬은 회전 행렬과 변환 행렬로 구성되어 참조하십시오, 우리는 계산

V = R * T 

가 정점 v를 변환하는

v' = V * v = R * T * v = R * (T * v) 

그래서 우리는 먼저 번역 한 후 회전을 적용합니다. 그리고 번역이 있기 때문에 회전 부분이 원점에도 영향을줍니다. 그래서 원점을 화면 중앙에 매핑 할 수 있습니다.