如标题所示,当面对任何非0或180度的方向时,对象无法正确移动。这是在3D空间中,但旋转仅在1轴(UP)上,因此对象左右旋转。 下面是一个用于帮助可视化问题的绘图:http://dl.dropbox.com/u/60309894/rotationissue.png 按住鼠标右键时,对象将根据鼠标的三角洲位置旋转。 下面是代码:对象不沿其所面向的方向移动,除非旋转角度为0或180度
// Check & calculate rotation.
if (mouse->ButtonIsDown(NiInputMouse::NIM_RIGHT))
{
int iDeltaX = 0, iDeltaY = 0, iDeltaZ = 0;
mouse->GetPositionDelta(iDeltaX,iDeltaY,iDeltaZ);
if (iDeltaX != 0)
{
NiMatrix3 mMat;
mMat.MakeRotation(iDeltaX/100.0f,NiPoint3::UNIT_Z);
SetRotate( GetRotate() * mMat );
}
}
// Check & calculate movement.
m_vVelocity = NiPoint3::ZERO;
if (keyboard->KeyIsDown(NiInputKeyboard::KEY_W) == true)
m_vVelocity.y++;
if (keyboard->KeyIsDown(NiInputKeyboard::KEY_S) == true)
m_vVelocity.y-- ;
if (keyboard->KeyIsDown(NiInputKeyboard::KEY_A) == true)
m_vVelocity.x--;
if (keyboard->KeyIsDown(NiInputKeyboard::KEY_D) == true)
m_vVelocity.x++;
m_vVelocity.Unitize();
// Move the object.
m_spNode->SetTranslate(GetTranslate() + m_vVelocity * GetRotate() * m_fSpeed * dt);