[김재진] 3D 행렬

Programming/DirectX 2010. 5. 24. 01:31 Posted by 알 수 없는 사용자
// 1000 밀리초마다 한바퀴씩 (2*pi) 회전 애니메이션 행렬을 생성.
// (1.0f * D3DX_PI) 회전속도
FLOAT fAngle = iTime * (2.0f * D3DX_PI) / 1000.0;

// y축을 회전축으로 회전하는 행렬을 생성
D3DXMatrixRotationY(&matWorld, fAngle); 

 // 시점 좌표값 설정 d3dx9math.h 참조
 // 뷰 행렬을 정의하기 위해서 3가지의 값이 필요
 D3DXVECTOR3 vEyePt(0.0f, 3.0f, -5.0f);   // 1. 눈의 위치를 0.0f, 3.0f, -5.0f - 카메라 좌표
 D3DXVECTOR3 vLookatPt(0.0f, 0.0f, 0.0f); // 2. 눈이 바라보는 위치(0,0,0) - 사물의 위치
 D3DXVECTOR3 vUpVec(0.0f, 1.0f, 0.0f);    // 3. 천정방향을 나타내는 상방 벡터 ( 0,1,0)

D3DXMATRIXA16 matView; // 좌표를 저장할 변수 클래스 선언

// 1,2,3의 값으로 뷰 행렬 생성
 D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookatPt, &vUpVec);

D3DXMatrixLookAtLH 함수 설명 및 왼손계 설정구현
http://blog.naver.com/peroz/60057859092

// 프로젝션 행렬을 정의하기 위해서는 시야각(FOV=Field of View)과 종횡비(aspect ratio), 클리핑 평면의 값이 필요
 D3DXMATRIXA16 matProj;
 // matProj     : 값이 설정될 행렬
 // D3DX_PI / 4 : FOV(D3DX_PI/4 = 45도)
 // 1.0f        : 종횡비
 // 1.0f        : 근접 클리핑 평면(near clipping plane)
 // 1.0f        : 원거리 클리핑 평면(far clipping plane)
 // 투영 변환 행렬 함수
 D3DXMatrixPerspectiveFovLH(&matProj, D3DX_PI/4, 1.0f, 1.0f, 100.0f);

 D3DXMatrixPerspectiveFovLH()함수와 D3DXMatrixLookAtLH()함수의 'LH' 는 왼손 좌표계를 의미한다.

위의 D3DXMatrixPerspectiveFovLH()함수와 D3DXMatrixLookAtLH() 함수를 각각  D3DXMatrixPerspectiveFovRH(), D3DXMatrixLookAtRH() 함수로 변경하면 회전하는 방향이 달라진다.


사용 lib
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"winmm.lib")

사용된 Header File
#include <Windows.h>
#include <MMSystem.h>
#include <d3dx9.h>
#include <d3d9.h>

'Programming > DirectX' 카테고리의 다른 글

[김재진]행렬의 곱셈 및 항등행렬 설명  (0) 2010.05.27
[손동진] 재질과 광원  (0) 2010.05.27
DirectX-정점  (1) 2010.05.20
DirectX-전체 화면 하는 방법  (1) 2010.05.19
스터디때 쓰일 발표 자료..  (1) 2010.05.17