【发布时间】:2013-06-30 04:08:27
【问题描述】:
标题几乎说明了一切.. 假设我有一艘船,它的 worldVelocity 是具有以下值的 Vector3: X: 0 是:0 Z:1 (假设 +Z 是向前,+Y 是向上,+X 是向右) 这个 Vector3 被添加到存储平移和旋转的船舶 worldTranslations Matrix 中。
worldTranslations.Translation += worldVelocity
我的船继续前进,它以速度 1(正确)停止加速,因为这是它的目标速度,但是如果船已经向右旋转 180 度,所以它现在向后飞行。船的目标速度会自动检测到这一点并开始尝试再次向前飞行。
问题是我不知道如何从我的船舶速度和 localTransforms 中获取本地速度,而且我无法在任何地方找到答案..
所以目前我的船使用世界速度来检查它是否达到目标速度,只要船不旋转,它就可以正常飞行。我的目标速度为 1,因此我的船将其当前速度 (0,0,0) 与目标速度 (0,0,1) 进行比较,并适当加速直到达到目标 (0,0,1) 并停止加速到保持恒定的速度,但如果我转(比如向右转 90 度),当前速度现在是(-1,0,0),因为船现在正在向左漂移,所以它应该使用该相对速度来确定它需要加速(1,0,1)回到(0,0,1),但我不知道如何获得相对速度,所以它目前使用的世界速度仍然是(0,0,1),即使它向左飞行所以它认为一切都很好,但它仍然在向左漂移..
谢谢..再次感谢大家:)
【问题讨论】:
-
将世界向量乘以逆局部矩阵怎么样?
-
它在做一些有趣的事情:/ 很难描述,但基本上这艘船开始向前移动,以非常小的速度它似乎可以适当地适应旋转,但也会绕圈子...... . 再快一点,它就会像疯了一样从中心盘旋而去 O.o
-
我已经修复了,你的想法是正确的。但是由于某种原因,我不得不只将结果向量的 Z 分量乘以 -1。我不明白为什么,也许它与其他数学有关,我做错了,但现在终于修好了。谢谢:)