D3D 렌더링 파이프 라인

정점 → [월드 행렬  →  카메라 행렬 → 투영 행렬]  → 변환된 정점

[] 부분이 렌더링 파이프 라인

D3D를 사용할 때는 반드시! 3개의 행렬값(월드, 뷰, 프로젝션 행렬)을 설정해야 한다.

월드 변환

로컬 좌표계의 문제점: 3차원 공간에 여러 개의 물체를 띄울 경우, 원점을 공유하는 현상이 발생한다. 이것들을 각각의 공간으로 떼어 놓으려면 월드 좌표계를 써야 한다.


TM(Transform Matrix): 월드 변환하는 행렬, 모든 물체마다 고유하게 하나씩 존재, 하드웨어 가속을 받으려면 SetTransform(D3DTS_WORLD, &matWorld)를 이용해야 함

카메라 변환

3차원 공간에 물체를 배치한 후, 이것들을 보려면 카메라를 배치해야 한다. 즉, 월드 좌표계를 카메라 좌표계로 변환해야 한다.


카메라 변환의 행렬 계산은, D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec)을 이용한다.

카메라 변환 행렬을 적용할 때는, SetTransform(D3DTS_VIEW, &matView);

투영 변환

3D 공간의 물체는 3차원 좌표계를 갖고 있지만, 모니터를 통해 보는 화면은 실제로는 2차원이다. 그렇기 때문에 투영 변환을 통해 2차원 좌표로 변환해야 한다.

직교 투영: CAD, 건축 도면처럼 Z축을 없애버림

원근 투영: 카메라 거리에 따라 투영되는 비율이 달라짐


투영 변환의 행렬 계산은, D3DXMatrixPerspectiveFovLH(&matProj, fov, Sw/Sh, Zn, Zf);

행렬을 적용할 때는, SetTransform(D3DTS_PROJECTION, &matProj);


+ Recent posts