我正在用 OpenGL 编写一个项目,在平移和旋转模型 View 矩阵后确定对象的位置时遇到了问题。 为了形象化这一点,想象一下地球如何绕太阳旋转,基本上,我需要在运行时确定地球的位置。
我将把代码分为几个步骤,假设我们处于起始位置 (0,0,0) 并且旋转等于 0。
while(true)
{
modelViewMatrix.PushMatrix(); //
modelViewMatrix.Translate(1, 1, 0); // 1
modelViewMatrix.Rotate(k++, 0, 1, 0); // 2
object.Draw(); // 3
modelViewMatrix.PopMatrix(); //
}
1 - 此时确定位置很容易,就是 (1, 1, 0)
2 - 现在我们将对象旋转到一些不断递增的值上,以使其围绕位置 (0, 0, 0) 移动
3 - 绘制对象
现在我知道 modelViewMatrix 存储旋转和位置等信息,但我不知道如何利用它来找出对象在平移和旋转后的实际位置。
这是我尝试绘制我正在谈论的内容,红色问号(?)表示我试图找到的对象的示例位置。
最佳答案
您应该能够在 (0,0,0) 创建 Vec3 并通过矩阵对其进行转换。这将为您提供“地球”的位置 - 您的对象可能已经有一个位置,因此您确实应该使用矩阵来转换对象的实际位置,而不是仅仅为了在那里绘制对象而更改整个模型 View 矩阵。
如果您好奇这些矩阵是如何工作的,请搜索“齐次变换矩阵”来阅读它们。
关于c++ - 确定旋转对象的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867792/