【发布时间】:2014-03-01 13:53:26
【问题描述】:
我正在关注 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矩阵是定义模型渲染位置的矩阵,但如果不修改View矩阵(这是有道理的),我似乎无法更改模型的渲染位置。
【问题讨论】: