确定旋转物体的位置

Determining position of rotated object

我正在用 OpenGL 编写一个项目,在平移和旋转 Model-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 并通过您的矩阵对其进行转换。这会给你 'Earth' 的位置 - 你的对象可能已经有一个位置,所以你真的应该使用你的矩阵来转换你的对象的实际位置,而不是仅仅为了绘制对象而改变你的整个模型视图矩阵那里。

如果您对这些矩阵的工作原理感到好奇,google "homogeneous transformation matrix" 可以继续阅读它们。