拜托,请原谅我,但我需要帮助,而我在这个问题上已经停留了几个星期,我没有取得任何进展,无论我走到哪里,我都会看到一个不同的答案,我尝试的所有方法都无法正常工作。我已经有了足够的技巧和建议,现在我真的只需要一个人给我答案,我就可以从此倒退,因为我不明白这一点。
使该主题最令人困惑的是每个人使用一组不同的约定或规则的方式,他们的答案基于他们自己的约定而没有定义它们的含义。
因此,这是我根据似乎最常见和合乎逻辑的内容形成的一组约定:
- 轴的右手法则。
- 正Y向上,正Z朝向观看者,正X朝向右侧。
- 行主矩阵,发送到着色器时转置。
- 螺距:绕X轴旋转
- 偏航:绕y轴旋转
- 滚动:绕z轴旋转
- 轮换顺序:横摇,俯仰,偏航(这是正确的吗?有人可以对此进行检查吗?)
- 从轴的正端向下看,正旋转值会导致顺时针旋转。
- 沿所有轴旋转0的默认方向是向下指向负Y的向量。
..鉴于这些约定(如果它们约定不对,请务必纠正我!),如何做:
- 写一个LookAt函数?(lookAt(矢量位置,矢量眼焦点,矢量向上))
- 计算旋转矩阵。(旋转(x,y,z))
至少在过去的3周内,我尝试自己回答了这两个问题,我至少重写了LookAt&Rotation Matrix函数30次,测试了数十种方法,并通读了我所见过的材料。数百个网站,阅读了许多回答的问题,复制了别人的代码,到目前为止,我所做的一切都没有奏效,所有事情都产生了错误的结果。其中一些产生了一些非常怪异的输出,甚至没有接近正确的旋转。
除昨晚外,我每天晚上都在为此工作,因为我对反复的失败感到非常沮丧,不得不停下来休息一下。
拜托,请告诉我正确的方法是什么,以便我可以逆向工作并弄清楚它是如何工作的,我只是没有得到正确的答案,这使我有些疯狂!
我正在用Java编写,但是我会接受用任何语言编写的代码,我的大多数3D渲染代码实际上都运行得非常出色,这只是我无法理解的数学。
更新:已解决
感谢您的帮助!现在,我有了一个我真正理解的可以正常工作的LookAt函数,而且我再也高兴不起来了(如果有人想问一下,请问)。
我确实曾尝试过根据俯仰/偏航/侧倾变量创建旋转矩阵,但它似乎还是失败了,但是我决定放弃尝试将euler角用于freelook相机,因为它似乎不适合用于角色,而不是我要创建一个四元数类,沿着这条路径走运可能会更好,否则,我将诉诸于使用螺距/偏航作为球面坐标,并依靠新的工作LookAt函数进行旋转。
如果还有其他人遇到类似的问题并想问我问题,请随时。
至少我不会再受困了,谢谢您的帮助!