FPS中子弹飞行轨迹随视点位置变化而变化的问题

来源:互联网 发布:刷qb源码 编辑:程序博客网 时间:2024/04/29 20:50

这几天做FPS,倒是好好的考验了下我的三维坐标变换。

 

开始直接将子弹的初始坐标和初始方向设置在view-space中,这样比较方便

 

那么初始坐标应该是view-space中枪口的坐标

 

 

接下来把view-space中的初始坐标和方向都变换到世界坐标系下,而后所有的变换都在世界坐标系下进行,都使用子弹在世界坐标系下的坐标。

 

结果我做出来发现一个问题,就是当人物移动射击时,所有子弹竟然都排成一条直线随着人物的移动而移动,变得像是在用激光枪一样。

 

也就是说,子弹的方向改变了,虽然从摄像机看,子弹的方向没有改变,但在世界坐标系下,子弹的方向却是变化的。

 

导致这个结果的原因就是在初始化时,将view-space中的方向变换到world-space时,使用的视图矩阵逆阵其中包含了平移的分量,这使得被变换的方向向量改变了方向。

 

于是应该除去视图变换矩阵逆阵中的平移分量,如下

::D3DXMatrixInverse(&matViewInverse,&fDet,&matView);

matViewInverse._41 = 0.0f;

matViewInverse._42 = 0.0f;

matViewInverse._43 = 0.0f;

::D3DXVec3TransformCoord(&m_direction_world,&direction,&matViewInverse);

 

 

这样就一切正常了,,纠结死我了

原创粉丝点击