多个网格或单个网格中的多个对象
Multiple meshes or multiple objects in a single mesh?
我正在尝试将多个对象加载到opengl中的vbo中。如果我想能够独立移动这些对象,我应该为每个对象使用一个网格,还是应该将所有对象加载到一个网格?
同样在我的代码中,我有。。。
loc1=glGetAttribLocation(阴影p,"顶点_位置");
现在我明白了,这会得到我当前程序中的顶点位置,但如果我想加载另一个对象,我会加载网格,然后我如何才能再次得到顶点位置,而只针对那个网格?
答案通常是"取决于"。每个对象有一个"网格"(即一个缓冲区)可以说是"更干净"的,但也可能更慢。每个对象一个缓冲区将使您更频繁地绑定不同的缓冲区。微小的顶点缓冲区对象(几十个顶点)和巨大的(千兆字节的数据)一样糟糕。你应该试着在之间找到一个"合理"的东西
从3.2版本起,现成的glDrawElementsBaseVertex
(也作为实例版本存在)将允许您从一个缓冲区无缝绘制多个对象或片段,而无需重新编号索引,也无需切换缓冲区。
您最好(假设OpenGL 3.3可用)根本不使用glGetAttribLocation
,而是使用布局说明符将属性分配给一个位置。这样,您就知道位置,不需要每次都询问,也不必担心可能会发生"奇怪、意外的事情"
如果无法在着色器中执行此操作,请改用glBindAttribLocation
(自2.0版本起可用)。它有点不太舒服,但起到了同样的作用。您可以决定位置,而不是询问它,并担心编译器希望不会更改两个不同着色器的顺序。
如果对不同的对象使用不同的缓冲区,通常会更干净。
根据:http://www.opengl.org/sdk/docs/man/xhtml/glGetAttribLocation.xml这只会返回指向数据位置的指针。您可以使用它将顶点信息绑定到程序。渲染其他对象时,将绑定到存储其他顶点的vbo。
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 使用对象文件读取三角形数据网格
- 两个不同的对象 OpenGL.VAO VBO IBO 网格失真问题
- c++OpenGL发布用存储在对象中的vbo和vao绘制网格
- 如何使对准对象自动筛选为屏幕,以便于像素网格
- 想要在从搅拌机导入的实体3D对象上绘制线框网格
- 使用DirectX/C++在不同位置渲染多个网格对象的有效方法
- 2D 阵列/网格中的对象移动
- 将对象位置与网格对齐
- 操纵网格对象中的索引
- 多个网格或单个网格中的多个对象
- 获取实例化几何对象的网格
- 使用带有纹理的.x文件网格会覆盖其他对象的颜色
- 检索CAD对象的网格点
- 如何在c++中操纵/移动一个网格中的对象
- 使用 OpenCV 对网格上的对象进行计数