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

How to manage the Model, View and Projection matrices in modern OpenGL

本文关键字:视图 投影 模型 管理 OpenGL      更新时间:2023-10-16

我有几个关于现代opengl的问题:

(i) 模型矩阵被描述为"包含应用于对象的每个平移、旋转或缩放"(1)

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

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

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

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

(i) 模型矩阵被描述为"包含应用于对象的每个平移、旋转或缩放"(1)

没有。矩阵就是一个矩阵。只有在特定的上下文中,矩阵才能获得额外的意义。

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

没有。

VAO不是模型。VAO只是对内存块的引用的集合。VAO中可以包含任何类型的数据。如果VAO包含几何图形数据,则在单个VAO中可以有多个独立的模型。

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

不一定。您还可以有16个矩阵,其中每个对象有2个共享其模型视图转换。

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

嗯,是的,但不要想太多。对象和变换矩阵之间没有严格的联系。