0

所以我在问这个问题之前就来过这里,但到目前为止没有人能够回答我的问题。所以我制作了一个视频来演示这个问题。

到目前为止,我已经检查并重新检查了我的数学文件,我的两位大学教授也是如此,我检查了我的着色器,我只是使用了一个简单的通过着色器。

我已经创建了一个关于问题发生的视频,我将描述一些我的过程。

我已将旋转的初始值设置为,这将其推到出现问题的地步。

rotX = 0.0f;
rotY = -22.0f;
rotZ = -62.0f;

这些值确保我不必在运行时旋转对象,这些值是问题发生的地方。正如您在视频中看到的那样,奶牛将开始旋转,而代码中没有任何地方实际告诉它这样做。我将旋转矩阵和旋转值输出到我的日志文件中,它们都是正常的。

http://www.youtube.com/watch?v=LB7_zftalT8

所以我从来没有在任何地方见过这个。如果有人看到过这样的事情,请告诉我。我没有发布任何代码,因为有很多可能的问题,但是我可以按需提供代码片段,或者提供对我的源 svn 的访问。

我已经花了三周时间调试这个问题,我至少有 10 组其他眼睛在看这个问题并审查我的代码。

我无法解决的唯一问题是内存损坏,我希望你有更好的运气。

编辑:

代码示例: http: //pastebin.com/hRSvEYAZ

我使用四元数进行旋转,我用轴角创建它们。然后我将多个旋转组合在一起并创建我的 4x4。

编辑:

我试过 MadCoreTom 提供的答案,没有帮助,我也继续查看内存,我看不到任何问题。

编辑:

所以我已经从我的四元数中删除了归一化调用,现在我只在从轴角度创建四元数时对轴进行归一化。我还为我的四元数重写了 toMatrix3,看看是否有帮助,但没有。

我还将更新旋转移动到我的按键内部,我也打算尽快提供更多代码。

4

2 回答 2

1

期间的舍入误差可能.normalize()会导致值略有变化,并且这种情况会不断增加,直到奶牛发疯。

您可以尝试以下方法,并在更新方法中使用rx代替:rotationX

rx = rotationX.normalized();

而不是每次循环时都修改值。

于 2012-11-27T06:02:20.690 回答
0

好吧,所以我解决了我的问题。存在掩盖实际问题的浮点错误。

所以一旦我解决了这个问题,虽然没有使用 MadcoreTom 提供的方法。我最终做的只是对轴进行归一化,而不是在旋转过程中对我的四元数进行归一化。

真正的问题是我正在存储我的角度并积累它,这是导致问题的原因。

现在我只是传入旋转的变化,从轴/角度变化创建我的四元数,然后将它乘以我的四元数F。

于 2012-11-28T13:54:50.020 回答