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);
'개발 > Direct3D' 카테고리의 다른 글
Visual Studio 2010에서 Direct 9 소스를 빌드할 때 에러가 뜰 경우 (0) | 2012.11.07 |
---|