![None.gif](/Images/OutliningIndicators/None.gif)
//-----------------------------------------------------------------------------
![None.gif](/Images/OutliningIndicators/None.gif)
// Desc: 设置世界矩阵
![None.gif](/Images/OutliningIndicators/None.gif)
//-----------------------------------------------------------------------------
![None.gif](/Images/OutliningIndicators/None.gif)
VOID SetWorldMatrix()
![dot.gif](/Images/dot.gif)
{
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
static long curTime=0;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
static float elapsetime=0;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
elapsetime = (timeGetTime()-curTime)/1000.0f;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
curTime = timeGetTime();
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
//创建并设置世界矩阵
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
float fRoll, fPitch, fYaw;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
fRoll = fPitch = fYaw = 0.0f;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
if (m_bKey['D']) fRoll -= 3*elapsetime;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
if (m_bKey['A']) fRoll += 3*elapsetime;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
if (m_bKey['S']) fPitch -= 3*elapsetime;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
if (m_bKey['W']) fPitch += 3*elapsetime;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
if (m_bKey['Q']) fYaw -= 3*elapsetime;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
if (m_bKey['E']) fYaw += 3*elapsetime;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
//更新网格模型姿态
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
static D3DXVECTOR3 vRight, vUp, vLook, vPos;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vRight.x = g_matWorld._11;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vRight.y = g_matWorld._12;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vRight.z = g_matWorld._13;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vUp.x = g_matWorld._21;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vUp.y = g_matWorld._22;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vUp.z = g_matWorld._23;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vLook.x = g_matWorld._31;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vLook.y = g_matWorld._32;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vLook.z = g_matWorld._33;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vPos.x = g_matWorld._41;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vPos.y = g_matWorld._42;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
vPos.z = g_matWorld._43;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3Normalize(&vLook, &vLook);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3Cross(&vRight, &vUp, &vLook);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3Normalize(&vRight, &vRight);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3Cross(&vUp, &vLook, &vRight);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3Normalize(&vUp, &vUp);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
static D3DXMATRIX matPitch, matYaw, matRoll;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXMatrixRotationAxis(&matYaw, &vUp, fYaw);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3TransformCoord(&vLook, &vLook, &matYaw);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3TransformCoord(&vRight, &vRight, &matYaw);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXMatrixRotationAxis(&matRoll, &vLook, fRoll);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3TransformCoord(&vRight, &vRight, &matRoll);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3TransformCoord(&vUp, &vUp, &matRoll);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXMatrixRotationAxis(&matPitch, &vRight, fPitch);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3TransformCoord(&vLook, &vLook, &matPitch);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
D3DXVec3TransformCoord(&vUp, &vUp, &matPitch);
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._11 = vRight.x;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._12 = vRight.y;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._13 = vRight.z;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._21 = vUp.x ;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._22 = vUp.y ;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._23 = vUp.z;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._31 = vLook.x;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._32 = vLook.y;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._33 = vLook.z;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
//向前移动
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
if (m_bKey['F'])
![dot.gif](/Images/dot.gif)
{
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._41 += 30*elapsetime * vLook.x;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._42 += 30*elapsetime * vLook.y;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._43 += 30*elapsetime * vLook.z;
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
//向后移动
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
if (m_bKey['V'])
![dot.gif](/Images/dot.gif)
{
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._41 -= 30*elapsetime * vLook.x;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._42 -= 30*elapsetime * vLook.y;
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_matWorld._43 -= 30*elapsetime * vLook.z;
![ExpandedSubBlockEnd.gif](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![InBlock.gif](/Images/OutliningIndicators/InBlock.gif)
g_pd3dDevice->SetTransform( D3DTS_WORLD, &g_matWorld );
![ExpandedBlockEnd.gif](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}