port from perforce
This commit is contained in:
87
evoke-64k/ev09/camera.h
Normal file
87
evoke-64k/ev09/camera.h
Normal file
@@ -0,0 +1,87 @@
|
||||
void CreateInterpolationCam(
|
||||
int iBank,
|
||||
float fTime,
|
||||
D3DXVECTOR3& CamPos,
|
||||
D3DXVECTOR3& LookAt )
|
||||
{
|
||||
D3DXVECTOR3 vecPos(
|
||||
GetFloatParam( iBank, 0 ),
|
||||
GetFloatParam( iBank, 1 ),
|
||||
GetFloatParam( iBank, 2 ) );
|
||||
D3DXVECTOR3 vecPos2(
|
||||
GetFloatParam( iBank + 1, 0 ),
|
||||
GetFloatParam( iBank + 1, 1 ),
|
||||
GetFloatParam( iBank + 1, 2 ) );
|
||||
D3DXVECTOR3 vecLookAt(
|
||||
GetFloatParam( iBank + 2, 0 ),
|
||||
GetFloatParam( iBank + 2, 1 ),
|
||||
GetFloatParam( iBank + 2, 2 ) );
|
||||
D3DXVECTOR3 vecLookAt2(
|
||||
GetFloatParam( iBank + 3, 0 ),
|
||||
GetFloatParam( iBank + 3, 1 ),
|
||||
GetFloatParam( iBank + 3, 2 ) );
|
||||
CamPos= vecPos + vecPos2 * fTime * GetFloatParam( iBank + 1, 3 );
|
||||
LookAt= vecLookAt + vecLookAt2 * fTime * GetFloatParam( iBank + 3, 3 );
|
||||
}
|
||||
|
||||
void CreateRotationCam(
|
||||
int iBank,
|
||||
float fTime,
|
||||
D3DXVECTOR3& CamPos,
|
||||
D3DXVECTOR3& LookAt )
|
||||
{
|
||||
|
||||
D3DXVECTOR3 vecPos(
|
||||
GetFloatParam( iBank, 0 ),
|
||||
GetFloatParam( iBank, 1 ),
|
||||
GetFloatParam( iBank, 2 ) );
|
||||
const float fRadiusA= GetFloatParam( iBank + 1, 0 );
|
||||
const float fSpeedA= GetFloatParam( iBank + 1, 1 ) * c_2PI;
|
||||
const float fRadiusB= GetFloatParam( iBank + 1, 2 );
|
||||
const float fSpeedB= GetFloatParam( iBank + 1, 3 ) * c_2PI;
|
||||
D3DXVECTOR3 vecLook(
|
||||
GetFloatParam( iBank + 2, 0 ),
|
||||
GetFloatParam( iBank + 2, 1 ),
|
||||
GetFloatParam( iBank + 2, 2 ) );
|
||||
vecPos.x+= sinf( fSpeedA * fTime ) * fRadiusA;
|
||||
vecPos.z+= cosf( fSpeedA * fTime ) * fRadiusA;
|
||||
|
||||
vecPos.y+= sinf( fSpeedB * fTime ) * fRadiusB;
|
||||
vecPos.z+= cosf( fSpeedB * fTime ) * fRadiusB;
|
||||
|
||||
CamPos= vecPos;
|
||||
LookAt= vecLook;
|
||||
}
|
||||
|
||||
void SetCamera( SCameraDescription* pCam, float fTime )
|
||||
{
|
||||
D3DXMATRIX mat;
|
||||
|
||||
D3DXVECTOR3 CamPos;
|
||||
D3DXVECTOR3 LookAt;
|
||||
|
||||
switch( pCam->m_iType )
|
||||
{
|
||||
case 0:
|
||||
CreateInterpolationCam(
|
||||
pCam->m_iBaseBank,
|
||||
fTime,
|
||||
CamPos,
|
||||
LookAt );
|
||||
break;
|
||||
case 1:
|
||||
CreateRotationCam(
|
||||
pCam->m_iBaseBank,
|
||||
fTime,
|
||||
CamPos,
|
||||
LookAt );
|
||||
break;
|
||||
}
|
||||
|
||||
D3DXMatrixLookAtLH( &mat,
|
||||
(D3DXVECTOR3*)&CamPos,
|
||||
(D3DXVECTOR3*)&LookAt,
|
||||
(D3DXVECTOR3*)&D3DXVECTOR3( 0.0f, 1.0f, 0.0f ) );
|
||||
g_d3d_device->SetTransform( D3DTS_VIEW, &mat );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user