2012-02-10 2 views
1

I 매트릭스 구현에 대한 깊이보다 점점하고, I는 OpenSceneGraph 역행렬 계산에서 주석 발견모델 뷰 매트릭스

We note that this matrix can be split into three matrices. 
mat = rot * trans * corr, where rot is rotation part, trans is translation part, and corr is the correction due to perspective (if any). 

모델 뷰 매트릭스는 매트릭스로 분해된다는 사실을

CORR 매트릭스

는 모델 뷰 행렬 (OpenGL을 표기법을 사용하여) 네 번째 줄을 제외하고 신분으로 재설정입니다 ... 회전과 번역은 합리적인 것 같지만 보정 행렬은 약 나를 궁금합니다. 예를 들어 :

corr = [ 1 0 0 0 
     0 1 0 0 
     0 0 1 0 
     x y z s ] 

일반적으로, c=[x y z s]{0 0 0 1}에 동일 벡터는, 실제로는 정점 변환에 기여하지 않습니다. 그러나, 그들이 연관되어 있기 때문에, 어떻게 수정 벡터가 사용됩니까?

c 수정 벡터의 구체적인 적용은 무엇입니까? 그런 매트릭스를 가진 변형 된 정점에 미치는 영향은 무엇입니까 (원근 보정이 있습니까?)

답변

2

4 × 4 행렬이 3D 컴퓨터 그래픽에서 작동하는 방법은 다음과 같습니다

[ x ] -> [ x/w ] 
[ y ]  [ y/w ] 
[ z ]  [ z/w ] 
[ w ]  [w/w=1] 

를 다음에서 : 모든 매트릭스 변환 후, 당신은 당신의 화면 좌표를 얻을 좌표 네 번째 (w)에 의해 4 벡터를 분할 개략도, 당신은 투시 투영의 형상의 깊이 값으로 나눗셈을 필요로 볼 수있다 :

. <- viewpoint: (0,0) 
|\ 
| \ 
| \ 
| \ 
|----+--- <- screen depth = 1 -> projected point on screen: (x/depth, 1) 
|  \        (due to geometry of similar triangles) 
|  \ 
|  \ 
|--------. <- general point: (x,depth) 

행렬의 네 번째 행은 w이 결과의 좌표를 결정되도록 최종 디비 on은 투시 투영을 수행 할 수 있습니다. [x/w, y/w] 값은 실제 화면 좌표에 비례하며 일반적으로 깊이 버퍼의 경우에는 [z/w]이 사용됩니다 (실제로 깊이의 역수와 비슷 함).

+0

이 변환은 연속 변환 (예 : 회전, 평행 이동, 축척) 중에 유지됩니까? – Luca

+0

예. 회전/변환/크기 조절은 그려지는 객체에 적용 (변형 시퀀스의 한쪽 끝에서) 또는 카메라의 역순으로 (변형 시퀀스의 다른 끝에서) 적용하는 것으로 생각할 수 있습니다. – comingstorm

+0

사실, 이것은 이것을 모델 뷰 (modelview) 매트릭스라고 부르는 이유입니다. 모델링 된 오브젝트가 어디에 위치 하는지를 지정하는 "모델"매트릭스와 (모델링 된 오브젝트의 위치와 특성을 지정하는) "뷰"매트릭스입니다. 뷰 카메라). – comingstorm