|
|
当提到walking时,沿着look向量前后移动。Strafing是说在我们观察方向的左右移动,也就是沿着right向量移动。最后,我们说flying就是沿着up向量移动。为了沿着这些轴移动,我们只需要简单地加一个向量就可以了
void Camera::walk(float units)//前进、后退
{
// move only on xz plane for land object
if( _cameraType == LANDOBJECT )//地面对象模式
_pos += D3DXVECTOR3(_look.x, 0.0f, _look.z) * units;
if( _cameraType == AIRCRAFT )//飞机、飞行器模式
_pos += _look * units;
}
问题:
查《计算机图形学》得知平移变换是按如下公式计算的(Tt为平移变换矩阵):
[x’ y’ z’ 1]=[x y x 1]×Tt=[x+Tx y+Ty z+Tz 1]
将此公式套用在上面的函数中我认为是这样的:
void Camera::my_walk(float units)//前进、后退
{
// move only on xz plane for land object
if( _cameraType == LANDOBJECT )//地面对象模式
_pos += D3DXVECTOR3(_units, 0.0f, units) ;
if( _cameraType == AIRCRAFT )//飞机、飞行器模式
_pos += D3DXVECTOR3(_units, units, units);
}
但是,在程序执行中,my_walk函数走的是斜线。不知道是什么原因,我到底哪里错了。请赐教。
|
|