88 lines
2.0 KiB
C
88 lines
2.0 KiB
C
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 );
|
|
}
|
|
|