我认为这很简单:
Vector3 point = Vector3.Transform(originalPoint, worldMatrix);
但显然不是......这使得这一点的数字飙升至数千。
基本上,我想做的是创建一个碰撞系统,这个系统中的每两个点都是一条线,所以基本上我想碰撞线。我希望线条能够基于世界矩阵进行缩放、旋转和平移(以便碰撞线与对象的缩放、旋转和平移保持一致)。
我已经尝试了几个小时,但我似乎无法弄清楚。我也尝试过乘以 View Matrix,虽然这最接近我想要的,但它似乎在两组数字之间切换!如果它保持在一组就完美了,我不知道为什么它一直在变化......
请问有什么帮助吗?:(
编辑:补充一点,我不断更新更新调用中的点。但我不知道这是否会改变任何事情,无论哪种方式,点=原始点。
Steve H:一条线有两点,所以:
originalPoint[0] = new Vector3(-42.5f, 0f, 0f);
originalPoint[1] = new Vector3(42.5f, 0f, 0f);
point[0] = Vector3.Transform(originalPoint[0], worldMatrix);
point[1] = Vector3.Transform(originalPoint[1], worldMatrix);`
起初,point[0] & [1]
等于originalPoint[0] & [1]
。但是,当我移动我的播放器时,哪怕只是几个像素......
point[0] = (-5782.5f, 0f, 0f)
point[1] = (-5697.5, 0f, 0f)
玩家的位置是-56.0f
。
我worldMatrix
的做法是:
_world = Matrix.Identity // ISROT
* Matrix.CreateScale(_scale) // This object's scale
* Matrix.CreateFromQuaternion(_rotation) // It's rotation
* Matrix.CreateTranslation(_offset) // The offset from the centre
* Matrix.CreateFromQuaternion(_orbitRotation) // It's orbit around an object
* _orbitObjectWorld // The object to base this world from
* Matrix.CreateTranslation(_position); // This object's position
对象在图形中正确显示。它们完全可以缩放、旋转、平移。它们也遵循轨道的比例、旋转和平移,但我还没有对轨道进行太多测试。
我希望这是足够的细节......
编辑:经过进一步研究,原点也正在改变......:| 我不明白为什么会这样。它们与新点完全相同...