Rendering Pipeline
목 차
Rendering Pipeline
월드 변환
카메라 제어
카메라 디자인
뷰 변환
후면추려내기
카메라 디자
카메라 구현
뷰 행렬 계산
클리핑
투영 변환
뷰포트 변환
임의의 축으로 회전
Pitch, Yaw, Roll
걷기 옆걸음질 날기뷰포트 변환
래스터라이즈
걷기, 옆걸음질, 날기
애니메이션및 게임 실습 2
렌더링 파이프라인
월드변환 뷰변환
로컬 스페이스 월드 스페이스 뷰 스페이스 후면 추려내기 조명
월드변환 뷰변환
클리핑투영뷰포트래스터라이즈
투영변환뷰포트변환
애니메이션및 게임 실습 3
월드 변환
로컬 스페이스 -> 월드 스페이스위치, 크기, 방위를 포함하는 각 물체간의 관계를 정의
zz z
z
x
y
x
yy
x
애니메이션및 게임 실습 4
월드 변환
변환의 연속
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
=⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎛
000000000
000
100010001
y
x
y
x
yzyyyx
xzxyxx
y
x
y
x
LLL
SS
S
RRRRRRRRR
TTT
WWW
⎟⎟⎠
⎜⎜⎝⎟⎟⎠
⎜⎜⎝⎟⎟⎠
⎜⎜⎝⎟⎟⎠
⎜⎜⎝
⎟⎟⎠
⎜⎜⎝ 11000
00010000
1000100
1zzzzzyzxzz LSRRRTW
월드좌표계
평행이동 회전 확대축소로컬
좌표계좌표계 좌표계
애니메이션및 게임 실습 5
월드 변환
변환의 연속
D3DXMATRIX matTrans, matRotX, matRotY;matWorld = matTrans * matRotX * matRotY;
D3DXMATRIX *D3DXMatrixMultiply(
D3DXMATRIX* pOut,
;
D3DXMATRIX pOut,CONST D3DXMATRIX* pM1,CONST D3DXMATRIX* pM2
)
변환의 설정
m_pd3dDevice->SetTransform(D3DTS_WORLD, &m_matWorld);m_pd3dDevice->SetTransform(D3DTS_VIEW, &m_matView);m_pd3dDevice->SetTransform(D3DTS_PROJECTION, &m_matProjection);
애니메이션및 게임 실습 6
월드 변환
행렬의 곱은 교환법칙이 성립하지 않음.
z z
x
회전 > 이동
x
이동 > 회전
애니메이션및 게임 실습 7
회전 -> 이동 이동 -> 회전
월드 변환
크기 변환
D3DXMATRIX *D3DXM t i S liD3DXMATRIX *D3DXMatrixScaling(
D3DXMATRIX *pOut,FLOAT sx,⎟
⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛= y
x
SS
SS
000000
,FLOAT sy,FLOAT sz
)
⎟⎠
⎜⎝ zS00
애니메이션및 게임 실습 8
월드 변환
이동
D3DXMATRIX *D3DXMatrixTranslation⎟⎞
⎜⎛ 0001
(D3DXMATRIX *pOut,FLOAT x,FLOAT y⎟
⎟⎟⎟⎟⎞
⎜⎜⎜⎜⎜⎛
=010000100001
TFLOAT y,FLOAT z
)
⎟⎟⎠
⎜⎜⎝ 1zyx TTT
애니메이션및 게임 실습 9
월드 변환
축에 의한 회전
D3DXMATRIX *D3DXMatrixRotationX(
⎟⎞
⎜⎛ 001 (
D3DXMATRIX *pOut,FLOAT angle
)⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛−=cossin0sincos0001
)(θθθθθxR
⎟⎟⎟
⎠
⎞
⎜⎜⎜
⎝
⎛=
0i010
sin0cos)(
θθ
θθθyR
D3DXMATRIX *D3DXMatrixRotationY(
D3DXMATRIX *pOut,FLOAT angle
⎟⎟⎞
⎜⎜⎛ −
=
⎟⎠
⎜⎝−
0cossin0sincos
)(
cos0sin
θθθθ
θ
θθ
R
FLOAT angle)D3DXMATRIX *D3DXMatrixRotationZ(
⎟⎟
⎠⎜⎜
⎝
=1000cossin)( θθθzR (
D3DXMATRIX *pOut,FLOAT angle
)
애니메이션및 게임 실습 10
월드 변환
임의의 축을 중심으로 하는 회전
D3DXMATRIX *D3DXMatrixRotationAxis(
D3DXMATRIX *pOut,CONST D3DXVECTOR3 * VCONST D3DXVECTOR3 *pV,FLOAT Angle
)
애니메이션및 게임 실습 11
월드 변환
Examplep
D3DXMATRIX cubeWorldMatrix;D3DXM i T l i (& b W ldM i 3 0f 2 0f 6 0f)D3DXMatrixTranslation(&cubeWorldMatrix, -3.0f, 2.0f, 6.0f);
D3DXMATRIX sphereWorldMatrix;D3DXMatrixTranslation(&sphereWorldMatrix, 5.0f, 0.0f, -2.0f);D3DXMatrixTranslation(&sphereWorldMatrix, 5.0f, 0.0f, 2.0f);
Device->SetTransform(D3DTS_WORLD, &cubeWorldMatrix);drawCube();
Device->SetTransform(D3DTS_WORLD, &sphereWorldMatrix);drawSphere();
애니메이션및 게임 실습 12
월드 변환
예제 : 회전 및 이동
애니메이션및 게임 실습 13
월드 변환
방위 벡터
시선벡터 : 물체가 향하고 있는 방향, z축상향벡터 : 물체의 y축, 뒤집힘 방지우향벡터 : 물체의 뒤집힘 방지 회전우향벡터 : 물체의 뒤집힘 방지, 회전
상향(Up)
시선(Look)
우향(Right)
애니메이션및 게임 실습 14
월드 변환
오일러각에 의한 회전
D3DXMATRIX *D3DXMatrixRotationYawPitchRoll
y
(D3DXMATRIX *pOut,FLOAT yaw,FLOAT it h
yaw
FLOAT pitch,FLOAT roll
)x
pitch
z
roll
애니메이션및 게임 실습 15
월드 변환
회전
D3DXMATRIX *D3DXVec3TransformCoord(
D3DXVECTOR3 *pOut,D3DXVECTOR3 pOut,CONST D3DXVECTOR3 *pv,CONST D3DXMATRIX *pM
)
// 상향벡터 중심 회전D3DXVec3TransformCoord(&vLook, &vLook, &matYaw);D3DXVec3TransformCoord(&vRight, &vRight, &matYaw);
// 우향 벡터 중심 회전D3DXVec3TransformCoord(&vLook, &vLook, &matPitch);D3DXVec3TransformCoord(&vUp &vUp &matPitch);D3DXVec3TransformCoord(&vUp, &vUp, &matPitch);
// 시선 벡터 중심 회전D3DXVec3TransformCoord(&vRight, &vRight, &matRoll);
애니메이션및 게임 실습 16
D3DXVec3TransformCoord(&vUp, &vUp, &matRoll);
월드 변환
벡터의 정규화
시선벡터 정규화우향벡터 : 시선벡터와 상향벡터의 외적우향벡터 정규화우향벡터 정규화상향벡터 : 시선벡터와 우향벡터의 외적상향벡터 정규화
D3DXVec3Normalize(&vLook, &vLook);D3DXVec3Cross(&vRight, &vUp, &vLook);( g , p, );D3DXVec3Normalize(&vRight, &vRight);D3DXVec3Cross(&vUp, &vLook, &vRight);D3DXVec3Normalize(&vUp, &vUp);
애니메이션및 게임 실습 17
월드 변환
벡터의 정규화
D3DXVECTOR3 *D3DXVec3Normalize(
D3DXVECTOR3 *pOutD3DXVECTOR3 *pOut,CONST D3DXVECTOR3 *v
)
벡터의 외적
D3DXVECTOR3* D3DXV 3CD3DXVECTOR3* D3DXVec3Cross(
D3DXVECTOR3* pOut,CONST D3DXVECTOR3* v1,,CONST D3DXVECTOR3* v2
)
애니메이션및 게임 실습 18
월드 변환
예제 : 오일러각에 의한 회전
애니메이션및 게임 실습 19
월드 변환
오일러 각에 의한 회전
항상 현 시점에서의 모델 좌표계를 기준으로 회전회전의 결과 좌표축 방향이 바뀐다는 점에 유의처음 z 축 기준 회전 결과 모델 좌표계의 x y 축 방향이 이전과는 달라짐처음 z 축 기준 회전 결과 모델 좌표계의 x, y 축 방향이 이전과는 달라짐회전을 적용하는 순서가 중요함. 교환법칙이 성립하지 않음
애니메이션및 게임 실습 20
월드 변환
단점 1. 복합 변환의 결과를 예측하기 어려움.
오리엔테이션을 보간하기 위해서 오일러 각 자체를 보간
오일러 각 (10 20 30)에 의해 회전하고 회전결과를 기준으로 (40 50 60)에 의오일러 각 (10, 20, 30)에 의해 회전하고 회전결과를 기준으로 (40, 50, 60)에 의해 회전하면, 원래 물체를 (50, 70, 90)에 의해 회전한 것과는 다름. 첫 번째 회전결과 좌표축 방향이 변해 버리기 때문
애니메이션및 게임 실습 21
월드 변환
단점 2. 김벌락(Gimbal Lock) 현상
x 축 기준으로 그림에 표시된 방향으로 일정 각도를 회전. 이어서 z 축을 기준으로90도 회전하면 x 축과 y 축이 나란해 짐
현재 상태에서 y 축을 기준으로 회전을 가하면 이전에 x 축 기준으로 이미 회전한각도에 영향을 미침. 회전결과 x, y, z 축이 독립성을 잃을 수 있음
애니메이션및 게임 실습 22
월드 변환
단점 3: 오리엔테이션이 변하는 경로가 유일하지 않음
y축을 기준 180도 회전z축을 기준으로 180도 회전 + x축을 기준으로 180도 회전
회전각을 직접적으로 보간해서는 오리엔테이션이 변하는 경로를 예측하기 어려움.
애니메이션및 게임 실습 23
월드 변환
회전축과 회전각을 사용: 회전축은 단위벡터로 나타냄
애니메이션및 게임 실습 24
월드 변환
사원수(Quaternion)Q
William Rowan Hamilton : 1843, 복소수의 확장Ken Shoemake : 1985, SIGGRAPH
이용골격체 애니메이션(Skeletal Animation)역 기구학(Inverse Kinematics)3D 물리학
장점행렬보다 적은 공간 차지행렬보다 적은 공간 차지보간(Interpolation)에 좋음
애니메이션및 게임 실습 25
월드 변환
사원수(Quaternion)Q
축-각 표현을 수학적으로 개선
축 관련 변수 3개와 회전각 관련 변수 1개를 하나의 4차원 변수로축 관련 변수 3개와 회전각 관련 변수 1개를 하나의 4차원 변수로
w = 스칼라 부(Scalar Part) 또는 실수 부(Real Part)v = 벡터 부(Vector Part) 또는 허수 부(Imaginary Part)단위 4원수: 벡터의 길이(노름, Norm) = 1단위 사원수(Unit Quaternion)만이 회전에 사용됨.
애니메이션및 게임 실습 26
월드 변환
사원수(Quaternion)Q
축각 표현과의 관계
애니메이션및 게임 실습 27
월드 변환
사원수 연산
단위 사원수 노름 값은 1이므로 공액 사원수 자체가 역 사원수
애니메이션및 게임 실습 28
월드 변환
사원수(Quaternion)Q
애니메이션및 게임 실습 29
월드 변환
사원수(Quaternion)Q
공액 곱셈(Conjugate Product)
사원수 q를 사용하여 실제로 회전을 가하는 작업원점으로부터 물체 위의 점 p를 향한 벡터 PP 앞쪽에 q를 곱하고 뒤쪽에 q의 공액 사원수를 곱하여 계산P 앞쪽에 q를 곱하고 뒤쪽에 q의 공액 사원수를 곱하여 계산P는 3차원 벡터. 이를 사원수로 만들려면 스칼라 부분인 w를 0으로
애니메이션및 게임 실습 30
월드 변환
사원수에 의한 보간
사원수 q1, q2 에 의해 연속적으로 회전하였다면 그 결과는 원래의 물체에 대해 사원수 q1*q2 으로 회전한 것과 동일
예:사원수 q에 의해 회전하고 그 결과를 다시 에 의해 회전예 사원수 q에 의해 회전하고 그 결과를 다시 에 의해 회전
애니메이션및 게임 실습 31
월드 변환
4차원 가상원구(Hypersphere)yp p
사원수 q는 물체 위치가 아니라 물체 오리엔테이션을 의미물체 오리엔테이션의 보간
원구면을 따라가면서 사원수를 선택원구면을 따라가면서 사원수를 선택오일러 각에 의해 보간할 경우 그림 (a)와 유사.
오리엔테이션의 변화가 매우 부자연스러움.
애니메이션및 게임 실습 32
월드 변환
러프(LERP: Linear intERPolation)
애니메이션및 게임 실습 33
월드 변환
슬러프(SLERP: Spherical Linear intERPolation) p
LERP의 경우 오리엔테이션이 바뀌는 속력이 변화함중심각 θ를 일정하게 증가시키면서 보간
애니메이션및 게임 실습 34
월드 변환
사원수의 보간
중복성
완전히 동일한 회전을 의미함.
원구 표면을 따라가면서 최단경로를 택했을 때 가장 자연스러움
그림의 경우 q2을 선택그림의 경우 q2을 선택벡터 내적에 의해 선택가능
애니메이션및 게임 실습 35
월드 변환
사원수를 이용한 회전
D3DQUATERNION *D3DXQ aternionRotationYa PitchRollD3DQUATERNION *D3DXQuaternionRotationYawPitchRoll(
D3DXQUATERNION *pOut,FLOAT yaw,yFLOAT pitch,FLOAT roll
)
D3DXMATRIX *D3DXMatrixRotationQuaternion(
D3DXMATRIX *pOut,CONST D3DXQUATERNION *pQ
)
애니메이션및 게임 실습 36
월드 변환
예제 : 사원수
애니메이션및 게임 실습 37
뷰 변환
뷰 변환
장면에서 관찰자의 위치와 방향 기술모니터를 통한 장면열 기준열 기준
카메라 모델
기본 모델
회전 불가능, 일반적인 경우
정교한 카메라 모델
회전 가능, 비행 시뮬레이터, 스페이스 슈터회전 가능, 비행 시뮬레이터, 스페이스 슈터
애니메이션및 게임 실습 38
뷰 변환
기본 모델
상향(Up)
D3DXMATRIX *D3DXMatrixLookAtLH(
시선(Look)
(D3DXMATRIX *pOut,CONST D3DXVECTOR3 *pEye,CONST D3DXVECTOR3 *pAt,CONST D3DXVECTOR3 *pUp
우향(Right)
CONST D3DXVECTOR3 *pUp)
D3DVECTOR3 position(5.0f, 3.0f, 10.0f);D3DVECTOR3 targetPoint(0.0f, 0.0f, 0.0f);D3DVECTOR3 worldUp(0.0f, 1.0f, 0.0f);D3DVECTOR3 worldUp(0.0f, 1.0f, 0.0f);
D3DXMATRIX V;D3DXMatrixLookAtLH(&V, &position, &targetPoint, &worldUp);
애니메이션및 게임 실습 39
Device->SetTransform(D3DTS_VIEW, &V);
뷰 변환
예제 : 카메라 회전
애니메이션및 게임 실습 40
후면 추려내기
Backface Cullingg
후면
전면
후면
전면
관찰점 관찰점
SetRenderState(D3DRS CULLMODE, value);( _ , );
• D3DCULL_NONE : culling 미사용• D3DCULL_CW : 시계방향 두르기• D3DCULL CCW : 반시계방향 두르기
애니메이션및 게임 실습 41
D3DCULL_CCW : 반시계방향 두르기
후면 추려내기
예제 : 후면 추려내기
애니메이션및 게임 실습 42
클리핑
시야 볼륨 외부의 기하물체 추리기
완전한 내부완전한 외부완전한 외부부분적 내부 +Z
내부
외부교차
+X
애니메이션및 게임 실습 43
투영 변환
원근 투영 변환
left
top
rightbottom
zNear
zFar
애니메이션및 게임 실습 44
투영 변환
원근 투영 변환+Z
D3DXMATRIX *D3DXMatrixPerspectiveFovLH(
D3DXMATRIX *pOut,f FLOAT fovy, // 시야각
FLOAT Aspect, // 종횡비FLOAT zn, // 가까운 사각형까지의 거리FLOAT zf // 먼 사각형까지의 거리
FOV
f
n FLOAT zf // 먼 사각형까지의 거리)
n
+X
D3DXMATRIX proj;D3DXMatrixPerspectiveFovLH(&proj, PI*0.5f, (float)width/(float)height, 1.0f, 1000.0f);Device->SetTrasnform(D3DTS PROJECTION, &proj);
애니메이션및 게임 실습 45
Device SetTrasnform(D3DTS_PROJECTION, &proj);
뷰포트 변환
뷰포트 변환
최종적으로 각 픽셀에 매핑되는 방법윈도우의 크기, 해상도
typedef struct _D3DVIEWPORT9 {
DWORD x;x,y
DWORD x;DWORD y;DWORD width;DWORD height;
heightg
float minz;float maxz;
} D3DVIEWPORT9;
width
애니메이션및 게임 실습 46
뷰포트 변환
뷰포트 변환
뷰포트 리셋
HRESULT GetViewport(D3DVIEWPORT9 *pViewport);
뷰포트 설정
HRESULT GetViewport(D3DVIEWPORT9 pViewport);
HRESULT S tVi t(D3DVIEWPORT9 * Vi t)HRESULT SetViewport(D3DVIEWPORT9 *pViewport);
D3DVIEWPORT9 vp = {0, 0, 640, 480, 0, 1};Device->SetViewport(&vp);
애니메이션및 게임 실습 47
뷰포트 변환
예제 : 뷰포트 변환
애니메이션및 게임 실습 48
래스터라이즈
래스터라이즈
2D 삼각형
픽셀 칼라 계산픽셀 칼라 계산
깊이 버퍼 계산
Overdrawing
애니메이션및 게임 실습 49
카메라 제어
카메라 제어
D3DXMatrixLookAtLH를 이용한 변환
고정된 위치에 카메라 이동시 유용고정된 위치에 카메라 이동시 유용사용자 입력에 반응하여 카메라 이동시 불편
1인칭 시점 게임에 유용한 카메라 제어 기술
애니메이션및 게임 실습 50
카메라 디자인
카메라 벡터
위치벡터 : P
방위 벡터(Orientation Vector)방위 벡터(Orientation Vector)
우향벡터 : R상향벡터 : U전방벡터 : L
정직교(orthonormal)U L
RRP
애니메이션및 게임 실습 51
카메라 디자인
카메라 동작
우향 벡터를 기준으로 회전(pitch)
상향 벡터를 기준으로 회전(yaw)
전방 벡터를 기준으로 회전(roll)
우향 벡터 방향으로 이동하기우향 벡터 방향으로 이동하기
상향 벡터 방향으로 날기
전방 벡터 방향으로 이동하기
class Camera
애니메이션및 게임 실습 52
카메라 구현
뷰 행렬 계산하기
)()()()( lllluuuurrrrpppp ====위치 우향 상향 전방
),,( ),,,( ),,,( ),,,( zyxzyxzyxzyx lllluuuurrrrpppp ====
A
BC
BC
C
D
AC
A
D
D
애니메이션및 게임 실습 53
월드스페이스 내의물체와 카메라
시점을 원점으로 이동 z-축과 정렬되도록시점 회전
카메라 구현
뷰 행렬 계산하기
V : 변환 행렬
pV = (0 0 0) : 행렬 V는 카메라를 원점으로 이동pV = (0,0,0) : 행렬 V는 카메라를 원점으로 이동rV = (1,0,0) : 행렬 V는 우향 벡터를 월드 x축과 정렬uV = (0,1,0) : 행렬 V는 상향 벡터를 월드 y축과 정렬lV = (0,0,1) : 행렬 V는 전방 벡터를 월드 z축과 정렬
V 행렬 구하기
카메라의 위치를 원점으로 이동하는 이동 파트카메라의 위치를 원점으로 이동하는 이동 파트카메라 벡터를 월드의 축과 정렬하는 회전 파트
애니메이션및 게임 실습 54
카메라 구현
이동
-p
⎥⎤
⎢⎡
00100001
⎥⎥⎥⎥⎥
⎦⎢⎢⎢⎢⎢
⎣ −−−
=
101000010
zyx ppp
T
⎥⎦⎢⎣ zyx ppp
애니메이션및 게임 실습 55
카메라 구현
회전
우향 : 월드의 x상향 : 월드의 y전방 : 월드의 z전방 : 월드의 z
위 조건을 만족하는 A 행렬
애니메이션및 게임 실습 56
카메라 구현
회전
[ ]020100⎥⎤
⎢⎡ aaa
[ ] [ ]0,0,1,,
222120
121110 =⎥⎥⎥
⎦⎢⎢⎢
⎣
=aaaaaarrrrA zyx
[ ] [ ]0,1,0,, 121110
020100
=⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡= aaa
aaauuuuA zyx
[ ]020100⎥⎤
⎢⎡ aaa
222120 ⎥⎦⎢⎣ aaa
[ ] [ ]1,0,0,,
222120
121110 =⎥⎥⎥
⎦⎢⎢⎢
⎣
=aaaaaallllA zyx
애니메이션및 게임 실습 57
카메라 구현
회전
⎤⎡⎤⎡⎤⎡ 001
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡=
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎣
⎡
=100010001
222120
121110
020100
aaaaaaaaa
llluuurrr
BA
zyx
zyx
zyx
⎦⎣⎦⎣⎦⎣ 222120zyx
IBBBA == −1
⎥⎥⎤
⎢⎢⎡
===−yyy
xxxT lur
lurABB 1
⎥⎥⎦⎢
⎢⎣ zzz
yyy
lurlu
애니메이션및 게임 실습 58
카메라 구현
이동과 회전 조합
void Camera::getViewMatrix()
lurlur xxxxxx⎥⎤
⎢⎡
⎥⎤
⎢⎡⎥⎤
⎢⎡ 000001
V
llurlur
lurlur
TAzzz
yyy
xxx
zzz
yyy
xxx
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
=
⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢⎢
⎣
⎡
⎥⎥⎥⎥⎥
⎦⎢⎢⎢⎢⎢
⎣
=
100
100000
101000010
lpuprpppp zyx⎥⎦
⎢⎣ ⋅−⋅−⋅−⎥
⎦⎢⎣⎥⎥⎦⎢
⎢⎣ −−− 110001
애니메이션및 게임 실습 59
카메라 구현
임의의 축으로 회전하기
D3DXMATRIX *D3DXMatrixRotationAxis(
D3DXMATRIX *pOut, // 회전 행렬
CONST D3DXVECTOR3 *pV, // 회전 기준 축p ,
FLOAT Angle // 회전 각도(라디안)
)
D3DXMATRIX R;
D3DXVECTOR3 axis(0.707f, 0.707f, 0.0f);
D3DXMatrixRotationAxis(&R, &axis, D3DX_PI/2.0f);
애니메이션및 게임 실습 60
카메라 구현
Pitch
void Camera::pitch(float angle){
D3DXMATRIX T;D3DXMatrixRotationAxis(&T, &_right, angle);
// _right를 기준으로 _up과 _look을 회전
D3DXVec3TransformCoord(&_up, &_up, &T);D3DXVec3TransformCoord(&_look, &_look, &T);
}
애니메이션및 게임 실습 61
카메라 구현
Yaw
void Camera::yaw(float angle){
D3DXMATRIX T;// 지상의 물체에 대해서는 월드 y를 기준으로 회전
if(_cameraType == LANDOBJECT)D3DXMatrixRotationY(&T, angle);
// 비행 물체에 대해서는 원래의 상향 벡터를 기준으로로 회전
if(_cameraType == AIRCRAFT)D3DXMatrixRotationAxis(&T, &_up, angle);
D3DXVec3TransformCoord(&_right &_right, &T);D3DXVec3TransformCoord(&_look, &_look, &T);
}
애니메이션및 게임 실습 62
}
카메라 구현
Roll
void Camera::roll(float angle){
// 비행 타입일 경우에만 회전
if(_cameraType == AIRCRAFT){
D3DXMATRIX T;D3DXMatrixRotationAxis(&T, &_look, angle);
D3DXVec3TransformCoord(&_right &_right, &T);D3DXVec3TransformCoord(&_up, &_up, &T);( _ p _ p )
}}
애니메이션및 게임 실습 63
카메라 구현
걷기
void Camera::walk(float units){{
if(units==0)return;
// 지상의 물체는 xz 평면으로 움직임을 제한// 지상의 물체는 xz 평면으로 움직임을 제한
if(_cameraType==LADOBJECT){
D3DXVECTOR3 dir;D3DXVECTOR3 dir;D3DXVec3Cross(&dir, &_right, &WORLD_UP);_pos += D3DXVECTOR3(dir.x, 0.0f, dir.z) * units;
}}if(_cameraType == AIRCRAFT)
_pos += _look*units;}
애니메이션및 게임 실습 64
}
카메라 구현
옆걸음질
void Camera::strafe(float units){{
// 지상의 물체는 xz 평면으로 움직임 제한
if(_cameraType == LANDOBJECT)pos += D3DXVECTOR3( right x 0 0f right z) * units;_pos += D3DXVECTOR3(_right.x, 0.0f, _right.z) * units;
if(_cameraType == AIRCRAFT)_pos += _right * units;
}}
애니메이션및 게임 실습 65
카메라 구현
날기
void Camera::fly(float units){{
// 비행물체에만 적용
if(_cameraType == AIRCRAFT)pos += up * units;_pos += _up * units;
}
애니메이션및 게임 실습 66
카메라
예제
애니메이션및 게임 실습 67
Question?Question?Question?Question?
애니메이션및 게임 실습 68