【问题标题】:How to manage the Model, View and Projection matrices in modern OpenGL如何在现代 OpenGL 中管理模型、视图和投影矩阵
【发布时间】:2014-06-12 19:02:33
【问题描述】:

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

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

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

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

(iii) 那么我可以将 View 和 Projection 矩阵作为着色器的一对统一处理吗?

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

【问题讨论】:

  • 我觉得你问的问题太多了,所以太宽泛了。
  • 我不确定如何缩小范围 =/。但是,如果您能够回答任何问题,将不胜感激

标签: c++ opengl glsl


【解决方案1】:

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

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

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

没有。

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

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

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

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

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

【讨论】:

  • “没有。一个矩阵......”他确实说“一个模型矩阵”是公平的
  • 没什么大不了的,哈哈。谢谢你,Datenwolf,你证实了我的怀疑,我现在可以更好地理解了。
  • VAO 并不真正包含数据。它们只是状态的集合。该状态引用 VBO,它们是包含数据的缓冲区。
猜你喜欢
  • 2011-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
相关资源
最近更新 更多