确定旋转物体的位置

时间:2015-01-09 19:29:10

标签: c++ opengl math 3d

我正在用OpenGL编写一个项目,我在翻译和旋转模型 - 视图矩阵后遇到了确定对象位置的问题。 想象一下,想象一下地球围绕太阳旋转的方式,基本上,我需要在运行时确定地球的位置。

我将我的代码分成几个步骤,假设我们处于(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存储旋转和位置等信息,但我不知道如何利用它来找到我的对象在翻译和旋转后的实际位置。

这是我尝试绘制我正在谈论的内容,红色问号(?)表示我想要找到的对象的示例位置。

enter image description here

1 个答案:

答案 0 :(得分:2)

您应该能够在(0,0,0)处创建Vec3并通过矩阵对其进行转换。这将为您提供“地球”的位置 - 您的物体可能已经有一个位置,因此您应该使用矩阵来变换对象的实际位置,而不是仅仅为了在那里绘制对象而更改整个模型视图矩阵。

如果您对这些矩阵的工作方式感到好奇,可以通过谷歌“均匀变换矩阵”来阅读它们。