旋转立方体

时间:2019-11-02 09:07:18

标签: c++ opengl glm-math

我有25个立方体,我想分别旋转每个立方体,这是我在x和y轴上的代码

我尝试使用rand(),但它不断奇怪地旋转它们,并且它们都沿相同方向旋转

这是在游戏循环中

for (unsigned int i = 0; i < 25; i++)
{
    glm::mat4 model = glm::mat4(1.0f);
    model = glm::translate(model, cubePositions[i]);
    view = glm::translate(model, glm::vec3(0.0f, 0.0f, -10.0f));
    float angle = 20.0f * i;

    angle = glfwGetTime() * 20.0f;

    model = glm::rotate(model, glm::radians(angle), glm::vec3(1.0f, 0.0f, 0.5f));
    GLint modelLoc = glGetUniformLocation(ourShader.Program, "model");
    glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
    GLint viewLoc = glGetUniformLocation(ourShader.Program, "view");
    glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
    GLint projLoc = glGetUniformLocation(ourShader.Program, "projection");
    glUniformMatrix4fv(projLoc, 1, GL_FALSE, 
    glm::value_ptr(projection));

    glDrawArrays(GL_TRIANGLES, 0, 36);
}

1 个答案:

答案 0 :(得分:0)

由于没有实际的问题,我尝试对发布的代码提出一些意见 可以解释所生成程序的意外行为。

  1. 初始化angle变量,然后立即为其分配一个新变量 价值;只有这个新值才有意义,那么多维数据集应该全部旋转 以每秒20度的速度旋转。 (这不是问题)
  2. 为{strong>每个对象重新分配了view矩阵!它是 这根本不是您想要的。
    就像在绘制单个框架时将相机移到 绘制的每个对象;如果您以相同的方式移动相机和对象, 然后所有内容都将显示在渲染帧的同一位置。 (我认为这是主要问题)
    您应该为所有view矩阵(以及projection 矩阵)。

一些其他评论,没有直接关系:

  • 您应该在循环之前全部检索一次统一位置 (甚至在程序开始时),因为它们不会更改很长时间 因为您使用相同的着色器程序。
  • glUniformMatrix4fv()projection的{​​{1}}调用 在循环之前全部发生一次;只有view矩阵从 一个物体到另一个物体。

可能看起来像这样

model
相关问题