我正在关注opengl-tutorial.org上的OpenGL教程,在教程4中,作为一个侧面“项目”,作者提议将两个“对象”发送给OpenGL,并且我们只渲染了一个对象之前。具体来说,他问:多模型视图矩阵
在不同的位置绘制立方体和三角形。您将需要生成2个MVP矩阵,以在主循环中进行2个绘制调用,但只需要1个着色器。
我们定义MVP
矩阵是这样的:
GLuint MatrixID = glGetUniformLocation(programID, "MVP");
glm::mat4 Projection = glm::perspective(90.0f, 4.0f/3.0f, 0.1f, 100.0f);
// Camera matrix
glm::mat4 View = glm::lookAt(
glm::vec3(0,0,3), // Camera is at (4,3,3), in World Space
glm::vec3(0,0,0), // and looks at the origin
glm::vec3(0,1,0) // Head is up (set to 0,-1,0 to look upside-down)
);
glm::mat4 Model = glm::mat4(1.0f);
glm::mat4 MVP = Projection * View * Model;
现在我明白了,只有一个MVP矩阵每个对象使用。但我有几个问题。
如何为每个对象创建一个MVP矩阵?是否必须为每个对象重新创建视图和模型矩阵(IE为每个对象指定一个新矩阵)?
我认为
glm::lookAt
被用作各种“相机”,所以我不应该为每个对象创建一个新的“相机”,我应该吗?矩阵做什么
Model
?作者说现在它是一个身份矩阵,但如果我改变它来说100,没有任何反应!我认为Model
矩阵是定义模型渲染位置的矩阵,但我似乎无法改变渲染模型的位置,而没有修改矩阵(这是合理的)。