【问题标题】:OpenGL multiple cube, rotate, moveOpenGL多个立方体,旋转,移动
【发布时间】:2012-12-17 18:52:18
【问题描述】:

我正在从这个教程中学习: http://en.wikibooks.org/wiki/Category:OpenGL_Programming http://www.opengl-tutorial.org/

我已经修改了http://www.opengl-tutorial.org/ 的第 7 课,以便立方体旋转,现在我想做的是在不同的地方有两个或树立方体并让它们旋转(立方体),但我真的不知道该怎么做。所以我请求并希望得到一些帮助。

通过以下代码进行旋转:

glm::vec3 axis_y(0, 1, 0);
glm::mat4 anim = glm::rotate(glm::mat4(1.0f), angle, axis_y);
...
glm::mat4 MVP = ProjectionMatrix * ViewMatrix * ModelMatrix * anim;

【问题讨论】:

    标签: c++ opengl


    【解决方案1】:

    本教程的细节我没有详细介绍,但原则上,您需要为每个立方体创建一个模型矩阵,然后用立方体的模型构造的 MVP 自己的值渲染每个立方体矩阵(以及全局视图和投影矩阵)。

    以上可以为您提供三个相同的立方体,它们处于不同的位置、旋转和比例。如果您需要三个不同的对象,则需要分别加载每个对象,最好是加载到其自己的缓冲区对象中。

    编辑

    我不知道教程使用的库,但编码的原则可能是这样的:

    for (int idxCube = 0; idxCube < 3; ++idxCube) {
      glm::mat4 offset = glm::translate(10 * idxCube, 0, 0);
      glm::mat4 MVP = ProjectionMatrix * ViewMatrix * ModelMatrix * offset * anim;
      glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);
      glDrawArrays(...);
    }
    

    这将在 (0, 0, 0)(10, 0, 0)(20, 0, 0) 的位置产生 3 个立方体。

    更一般地说,每个立方体只有一个 ModelMatrix

    【讨论】:

    • 我明白你在说什么,你能给我举个例子来说明它是如何转化为代码的吗?
    • @Jan 我已经扩展了答案,可以理解吗?
    • 谢谢,我设法得到了两个立方体,一个围绕它的 x 轴旋转,另一个围绕第一个立方体旋转,仍然有些想法我不太明白,但你的回答是非常有用且易于理解
    猜你喜欢
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2021-05-25
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多