반응형

출처 : gamza.net

** OpenGL 좌표계에서 D3D좌표계로... **
copyrightⓒ 김성수 [2002년 04월 30일]

D3D는 왼손좌표계, OpenGL은 오른손좌표계를 사용합니다.


D3D좌표계(좌)와 OpenGL좌표계(우)

두 좌표계의 변환은 보통 y축과 z축을 맞바꾸는방법이 사용됩니다.
y축과 z축을 교환하는것은 일반적인 모델링툴에서 윗쪽벡터를..
왼손좌표계 -> y 축 , 오른손좌표계 -> z 축
으로 잡기 때문입니다. 때문에 멀쩡히 서있던 캐릭터를 눕혀놓지 않으려면 y축과 z축을 바꿔줘야 하죠.

1. 행렬변환
사용하는 좌표계와 다른 (회전/이동/확대축소)행렬을 사용해야 할경우, 사용할 행렬의 앞뒤에 다음행렬을 곱해서 자신이 사용하는 좌표계로 변환할수 있습니다.

[ 1 0 0 0 ]
[ 0 0 1 0 ]
[ 0 1 0 0 ]
[ 0 0 0 1 ]
좌표계 변환행렬
(y축과 z축을 맞바꾼다)

예> D3D행렬 = 좌표계변환 행렬 * OpenGL 행렬 * 좌표계변환행렬
이론적으로 이렇다는 말이고 실제는 그냥 행렬의 2행 3행을 맞바꾼다음, 2열 3열을 맞바꿔버리는 방법을 쓰죠.

2. 데이터 변환
데이터와 어플리케이션의 좌표계가 다를 경우 원본데이터를 읽어올때 데이터에 좌표계 변환행렬을 곱해버립니다.
( 이것두 말로하자면 그렇다는 얘기고, 행렬을 곱하구 자시구 할것두 없이 y와 z를 맞바꾸기만 하면됩니다. )

잠깐[1]
여기서 주의할것은 오른손좌표계의 데이터를 왼손좌표계에서 그대로 출력하면 폴리곤이 뒤집힌다는 것입니다. 이때 좌표계 변환 행렬이 이것을원상복귀 시켜주게되죠.
그런데...보통 오른손 좌표계에서는 폴리곤의 앞면을 반시계방향으로 정의하고, 왼손좌표계에선 시계방향을 앞면으로 정의하기때문에...
결국은....일반적으로는 폴리곤을 읽어올때 뒤집어서 읽어와야 합니다.

반응형

'그래픽스(Graphics) > DirectX9~12' 카테고리의 다른 글

D3DPRESENT_INTERVAL_IMMEDIATE  (0) 2012.11.02
ID3DXSprite 이미지 출력 , 빌보딩  (0) 2012.11.02
D3DX 직교투영  (0) 2012.11.02
3ds lib & 3ds SDK Toolkit  (0) 2012.11.02
픽킹 ppt  (0) 2012.11.02

+ Recent posts