确定旋转物体的位置
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" 可以继续阅读它们。
我正在用 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" 可以继续阅读它们。