我对现代opengl有几个问题:
(i)模型矩阵被描述为“包含应用于对象的每个翻译,旋转或缩放”(1)
(ii)因此,每个VAO(包含一个场景对象,如椅子)必须有一个顶点属性,一个4x4模型矩阵,它包含该对象的平移,旋转和缩放,以便顶点着色器将每个顶点转换为世界空间,对吧?
因此,如果我有32个场景对象(每个场景对象1个模型矩阵),我会有32个模型矩阵吗?
(iii)那么我可以将视图和投影矩阵作为着色器的几个制服处理吗?
(iv)如果一个程序有多个场景对象,例如具有不同平移,旋转和缩放的桌子和椅子,是否可以有1个模型矩阵来容纳每个场景对象的不同平移,旋转和缩放?
答案 0 :(得分:2)
(i)模型矩阵被描述为“包含应用于对象的每个翻译,旋转或缩放”(1)
没有。矩阵只是一个矩阵。只有在某种情况下,矩阵才能获得额外的含义。
(ii)因此,每个VAO(包含一个场景对象,如椅子)必须有一个顶点属性,一个4x4模型矩阵,它包含该对象的平移,旋转和缩放,以便顶点着色器将每个顶点转换为世界空间,对吧?
没有
VAO不是模特。 VAO只是对记忆帅哥的引用的集合。 VAO中可以包含任何类型的数据。如果VAO包含几何数据,则单个VAO中可以有多个独立模型。
因此,如果我有32个场景对象(每个场景对象1个模型矩阵),我会有32个模型矩阵吗?
不一定。你也可以有16个矩阵,其中2个对象分别进行模型转换。
(iv)如果一个程序有多个场景对象,例如具有不同平移,旋转和缩放的桌子和椅子,是否可以有1个模型矩阵来容纳每个场景对象的不同平移,旋转和缩放?
嗯,是的,但不要过分思考这个问题。对象和转换矩阵之间没有严格的联系。