C++ 确定旋转物体的位置

C++ 确定旋转物体的位置,c++,opengl,math,3d,C++,Opengl,Math,3d,我正在用OpenGL编写一个项目,在平移和旋转模型视图矩阵之后,我遇到了一个确定对象位置的问题。 想象一下地球是如何围绕太阳旋转的,基本上,我需要在运行时确定地球的位置 我将把代码分成几个步骤,假设我们在(0,0,0)的起始位置,旋转等于0 while(true) { modelViewMatrix.PushMatrix(); // modelViewMatrix.Translate(1, 1, 0); // 1 modelViewMatrix.

我正在用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存储了旋转和位置等信息,但我不知道如何利用这些信息在平移和旋转对象后找出对象的实际位置

这是我在画我所说的东西时的尝试,红色问号(?)表示我试图找到的对象的示例位置


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


如果你想知道这些矩阵是如何工作的,谷歌“齐次变换矩阵”来阅读它们。

Ahh解决方案非常接近!我曾经有过这样的想法:“我能不能把m*v乘以,那就是位置”,但我放弃了这个想法,现在它变成了解决方案!谢谢你,伙计!:)很高兴它起作用了。一定要仔细阅读这些矩阵——了解它们是什么真的很好。