Files
bluflame/evoke-64k/ev09/camera.h
2026-04-18 22:31:51 +02:00

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 );
}