|
|
大致思路是,物体往运动方向旋转, 旋转后的X轴向就是运动方向。 而Y轴向朝向的是视点。
我的做法是直接将物体坐标系 旋转至 目标坐标系。
局部坐标系的Y就是法向量。代表物体的朝向

以下是我的代码,
NiPoint3 kCamD = pkCamera->GetWorldLocal() - GetWorldTranslate();
kCamD.Unitize();
NiMatrix3 InvRotate;
m_kWorld.m_Rotate.Inverse(InvRotate);
kCamD = InvRotate* kCamD;//转到物体的局部坐标系
kCamD.Unitize();
NiPoint3 kRotateX = m_kMoveDirection;
NiPoint3 kRotateTestY = kCamD;// 这里填NiPoint3::UNIT_Z,所有物体就朝向世界坐标系的Z轴了。
NiPoint3 kRotateZ = kRotateTestY.Cross(kRotateX);
NiPoint3 kRotateY = kRotateX.Cross(kRotateZ);
//kRotateX.Unitize();
//kRotateY.Unitize();
//kRotateZ.Unitize();
NiMatrix3 kRotate(kRotateX,kRotateZ,kRotateTestY); //关键是旋转矩阵
m_kWorld.m_Rotate = kRotate;
不知道有没有错。请大家帮忙看看, 用的是gamebryo引擎。。
我想也不是很难理解吧?
总之我转出来X轴向是对了,物体是转到运动方向了,但是物体却没有朝向视点 |
|