如何在现代OpenGL中管理模型、视图和投影矩阵
How to manage the Model, View and Projection matrices in modern OpenGL
我有几个关于现代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)如果一个程序有一个以上的场景对象,例如具有不同平移、旋转和缩放的桌子和椅子,是否可以有一个模型矩阵来适应每个场景对象的不同平移、转动和缩放?
嗯,是的,但不要想太多。对象和变换矩阵之间没有严格的联系。
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 视图中的参数推导失败:take_while
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在另一个类视图中添加最多2个图表的正确方法是什么
- OpenVR:向视图方向移动
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 将所选值(通过视图)从 boost::multi_array 复制到另一个数组 (C++)
- 如何在不使用滚动条的情况下使视图更改
- 应用投影矩阵后对象消失
- 列表视图更改选择颜色
- Qt - QVector 和模型视图 - 从列表视图获取自定义类的最佳方法是什么?
- 将世界、视图和投影矩阵传递到 Direct3D 中的着色器
- 无法正确生成视图投影矩阵
- QMatrix4x4 模型视图投影 OpenGL 无法获取要渲染的场景
- 投影和视图矩阵
- 设置opengl视图和投影转换
- 我需要澄清"Spaces"的概念(世界空间,视图空间,投影空间,局部空间和屏幕空间)(c ++,direct3d 11)
- 如何在现代OpenGL中管理模型、视图和投影矩阵
- 模型视图-在Opengl2.x[C++]中获取模型视图和投影矩阵
- 现代OpenGL投影视图模型转换不起作用