不同旋转的立方体

问题描述 投票:0回答:1

我有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);
}
c++ opengl glm-math
1个回答
0
投票

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

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

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

  • 您应在循环前全部检索一次统一位置(甚至在程序开始时),因为它们不会更改很长时间当您使用相同的着色器程序时。
  • glUniformMatrix4fv()要求projection,而view应该在循环之前全部发生一次;只有model矩阵从一个对象与另一个对象。
© www.soinside.com 2019 - 2024. All rights reserved.