|
谁能够提供些详细点并且容易读懂的关于坐标变换相关的资料?
很多说的不是很详细 要么就是不容易懂。
//************************************************************
// camera stuff
//************************************************************
fRoll = fPitch = fYaw = 0.0f;
D3DXVECTOR3 vPos(0.0f, 0.0f, 0.0f);
static D3DXMATRIX matView = D3DXMATRIX(1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f,-5.0f, 1.0f);
// Process keyboard input
if (m_bKey[VK_UP]) fPitch += fOneStep; // Pitch Up
if (m_bKey[VK_DOWN]) fPitch -= fOneStep; // Pitch Down
if (m_bKey[VK_LEFT]) fYaw += fOneStep; // Turn Left
if (m_bKey[VK_RIGHT]) fYaw -= fOneStep; // Turn Right
if (m_bKey['C']) fRoll += fOneStep; // Rotate Left
if (m_bKey['X']) fRoll -= fOneStep; // Rotate Right
if (m_bKey[VK_HOME]) vPos.z += fOneStep; // Move Forward
if (m_bKey[VK_END]) vPos.z -= fOneStep; // Move Backward
if (m_bKey[VK_NUMPAD4]) vPos.x -= fOneStep; // Slide Left
if (m_bKey[VK_NUMPAD6]) vPos.x += fOneStep; // Slide Right
if (m_bKey[VK_NUMPAD8]) vPos.y += fOneStep; // Slide Down
if (m_bKey[VK_NUMPAD2]) vPos.y -= fOneStep; // Slide Up
// Update position and view matricies
D3DXMATRIX matR, matTemp;
D3DXQuaternionRotationYawPitchRoll (&qR, fYaw, fPitch, fRoll);
D3DXMatrixRotationQuaternion (&matR, &qR);
D3DXMatrixMultiply (&matView, &matR, &matView);
D3DXMatrixTranslation (&matTemp, vPos.x, vPos.y, vPos.z);
D3DXMatrixMultiply (&matView, &matTemp, &matView);
D3DXMatrixInverse (&matTemp, NULL, &matView);
m_pd3dDevice->SetTransform(D3DTS_VIEW, &matTemp );
谁能够再说说为什么这里要D3DXMatrixInverse (&matTemp, NULL, &matView)?
而且matView=matTemp*matR*matView这样的变换顺序是乱的,因为matView是静态的,保存了之前的平移的信息,如果在此基础上在旋转再平移,这样不是很乱吗?是不是书错了? |
|