如何管理现代OpenGL中的模型,视图和投影矩阵

时间:2014-04-27 07:35:37

标签: c++ opengl glsl

我对现代opengl有几个问题:

(i)模型矩阵被描述为“包含应用于对象的每个翻译,旋转或缩放”(1

(ii)因此,每个VAO(包含一个场景对象,如椅子)必须有一个顶点属性,一个4x4模型矩阵,它包含该对象的平移,旋转和缩放,以便顶点着色器将每个顶点转换为世界空间,对吧?

因此,如果我有32个场景对象(每个场景对象1个模型矩阵),我会有32个模型矩阵吗?

(iii)那么我可以将视图和投影矩阵作为着色器的几个制服处理吗?

(iv)如果一个程序有多个场景对象,例如具有不同平移,旋转和缩放的桌子和椅子,是否可以有1个模型矩阵来容纳每个场景对象的不同平移,旋转和缩放?

1 个答案:

答案 0 :(得分:2)

  

(i)模型矩阵被描述为“包含应用于对象的每个翻译,旋转或缩放”(1)

没有。矩阵只是一个矩阵。只有在某种情况下,矩阵才能获得额外的含义。

  

(ii)因此,每个VAO(包含一个场景对象,如椅子)必须有一个顶点属性,一个4x4模型矩阵,它包含该对象的平移,旋转和缩放,以便顶点着色器将每个顶点转换为世界空间,对吧?

没有

VAO不是模特。 VAO只是对记忆帅哥的引用的集合。 VAO中可以包含任何类型的数据。如果VAO包含几何数据,则单个VAO中可以有多个独立模型。

  

因此,如果我有32个场景对象(每个场景对象1个模型矩阵),我会有32个模型矩阵吗?

不一定。你也可以有16个矩阵,其中2个对象分别进行模型转换。

  

(iv)如果一个程序有多个场景对象,例如具有不同平移,旋转和缩放的桌子和椅子,是否可以有1个模型矩阵来容纳每个场景对象的不同平移,旋转和缩放?

嗯,是的,但不要过分思考这个问题。对象和转换矩阵之间没有严格的联系。