?? ccamera.cpp
字號:
#include <d3dx9math.h>
#include "CCamera.h"
#include "3dhelp.h"
CCamera::CCamera( float x, float y, float z )
{
pos = D3DXVECTOR3( x, y, z );
right = D3DXVECTOR3( 1.0f, 0.0f, 0.0f );
up = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
look = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
}
CCamera::~CCamera()
{
}
/////////////////////////////////////////////////////////////////////
//計算視圖矩陣
/////////////////////////////////////////////////////////////////////
void CCamera::GetViewMatirx( D3DXMATRIX &v )
{
D3DXVec3Normalize( &look, &look );
D3DXVec3Cross( &up, &look, &right );
D3DXVec3Normalize( &up, &up );
D3DXVec3Cross( &right, &up, &look );
D3DXVec3Normalize( &right, &right );
float x, y, z;
x = -D3DXVec3Dot( &right, &pos );
y = -D3DXVec3Dot( &up, &pos );
z = -D3DXVec3Dot( &look, &pos );
v( 0, 0 ) = right.x; v( 0, 1 ) = up.x; v( 0, 2 ) = look.x; v( 0, 3 ) = 0.0f;
v( 1, 0 ) = right.y; v( 1, 1 ) = up.y; v( 1, 2 ) = look.y; v( 1, 3 ) = 0.0f;
v( 2, 0 ) = right.z; v( 2, 1 ) = up.z; v( 2, 2 ) = look.z; v( 2, 3 ) = 0.0f;
v( 3, 0 ) = x; v( 3, 1 ) = y; v( 3, 2 ) = z; v( 3, 3 ) = 1.0f;
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::strafe( float n )
{
pos += right * n;
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::fly( float n )
{
pos += up * n;
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::walk( float n )
{
pos += look * n;
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::pitch( float angle )
{
D3DXMATRIX m;
D3DXMatrixRotationAxis( &m, &right, angle );
D3DXVec3TransformCoord( &up, &up, &m );
D3DXVec3TransformCoord( &look, &look, &m );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::yaw( float angle )
{
D3DXMATRIX m;
D3DXMatrixRotationAxis( &m, &up, angle );
D3DXVec3TransformCoord( &right, &right, &m );
D3DXVec3TransformCoord( &look, &look, &m );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::roll( float angle )
{
D3DXMATRIX m;
D3DXMatrixRotationAxis( &m, &look, angle );
D3DXVec3TransformCoord( &up, &up, &m );
D3DXVec3TransformCoord( &right, &right, &m );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::RotationU(float angle)
{
D3DXMATRIX m;
D3DXMatrixRotationAxis( &m, &up, angle );
D3DXVec3TransformCoord( &pos, &pos, &m );
D3DXVec3TransformNormal( &right, &right, &m );
D3DXVec3TransformNormal( &look, &look, &m );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::RotationR(float angle)
{
D3DXMATRIX m;
D3DXMatrixRotationAxis( &m, &right, angle );
D3DXVec3TransformCoord( &pos, &pos, &m );
D3DXVec3TransformNormal( &up, &up, &m );
D3DXVec3TransformNormal( &look, &look, &m );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::ResetPos( float x, float y, float z )
{
pos = D3DXVECTOR3( x, y, z );
right = D3DXVECTOR3( 1.0f, 0.0f, 0.0f );
up = D3DXVECTOR3( 0.0f, 1.0f, 0.0f );
look = D3DXVECTOR3( 0.0f, 0.0f, 1.0f );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::Slope45()
{
ResetPos( 0.0f, 0.0f, -6.0f );
RotationU( AngleToRadian( 45.0f ) );
RotationR( AngleToRadian( 45.0f ) );
//RotationU( -45.0f );
//RotationR( 45.0f );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::LookAtX( float f )
{
ResetPos( 0.0f, 0.0f, f );
RotationU( AngleToRadian( -90.0f ) );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::LookAtY( float f )
{
ResetPos( 0.0f, 0.0f, f );
RotationR( AngleToRadian( 90.0f ) );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::LookAtZ( float f )
{
ResetPos( 0.0f, 0.0f, f );
}
/////////////////////////////////////////////////////////////////////
//
/////////////////////////////////////////////////////////////////////
void CCamera::RotationY(float angle)
{
D3DXMATRIX m;
D3DXMatrixRotationY( &m, angle );
D3DXVec3TransformCoord( &pos, &pos, &m );
D3DXVec3TransformCoord( &up, &up, &m );
D3DXVec3TransformCoord( &right, &right, &m );
D3DXVec3TransformCoord( &look, &look, &m );
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -