我有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);
}
由于没有实际的问题,我尝试对发布的代码提出一些意见可以解释结果程序的意外行为。
angle
变量被初始化,然后立即分配一个新的价值;只有这个新值才有意义,那么多维数据集应该全部旋转以每秒20度的速度旋转。 (这不是问题)view
矩阵为每个对象重新分配了一个新值!它是这是您想要的可能性极小。就像在绘制单个框架时将相机移到绘制的每个对象;如果您以相同的方式移动相机和对象,然后注意渲染帧中的移动。 (我认为这是主要问题)您应该为所有view
矩阵(以及projection
矩阵)。一些其他评论,没有直接关系:
glUniformMatrix4fv()
要求projection
,而view
应该在循环之前全部发生一次;只有model
矩阵从一个对象与另一个对象。