c++ - 确定旋转对象的位置

标签 c++ opengl math 3d

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

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

enter image description here

最佳答案

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

如果您好奇这些矩阵是如何工作的,请搜索“齐次变换矩阵”来阅读它们。

关于c++ - 确定旋转对象的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27867792/

相关文章:

c++ - vector 正在丢失 mat4 信息

algorithm - 列表中数字的倍数

c++ - 我的通用模板应该使用 T 还是 T&&?

c++ - 如何在sdl2中渲染一个点

c++ - 刷新显示每个运动(速度)(openGL)

java - opengl 窗口在移动/调整大小时卡住

math - 三次贝塞尔曲线描边轮廓

algorithm - 找到形状在 x 轴上可能具有最小宽度的旋转

c++ - 为什么 atoi 函数不能将 const char * 转换为 int?

c++ - 在多线程环境中测量墙上时间