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

这几天做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);

 

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值