我试图使用glDrawRangeElements()命令渲染一些旧的级别数据.我的顶点设置正确,我的索引设置正确,但我似乎无法渲染它.我终于在网上查了一下,发现了这里的例子:http://www.songho.ca/opengl/gl_vertexarray.html
从这个例子来看,我认为我做错了.显然,start是索引值,结尾是索引值,而不是indices数组的索引.我假设,例如,如果你想渲染10个三角形,开始将是0,结尾将是29,计数将是30.但我显然是错的?
只有当索引值为0和29实际上是0和29时,这才是正确的.因此,如果索引以400开始并以452结束,则对该相同数组的调用将改为
glDrawRangeElements(GL_TRIANGLES, 400, 452, 29, GL_UNSIGNED_BYTE, indices);
Run Code Online (Sandbox Code Playgroud)
那是对的吗?有没有人认为这有点反直觉?关于顶点数组的任何其他建议?
Nic*_*las 20
首先,我们来谈谈glDrawElements,因为Range版本只是对它的修改.这count是从源索引数组中提取的索引数.每个索引都将地图拉到顶点.所以,如果你count是"29",那么你试图渲染29个顶点.如果使用GL_TRIANGLES,这将只渲染27个顶点,因为每个三角形需要三个顶点.OpenGL将丢弃额外内容.
因此,如果要渲染30个索引,则将30个作为计数.
现在我们知道如何使用glDrawElements,让我们来谈谈glDrawRangeElements.正常使用时glDrawElements,您可以在源索引数组中指定要从中拉出的位置.在indices和count参数告诉OpenGL在哪里可以找到索引.但是从该数组中提取的实际索引可以是源顶点数组索引边界内的任何位置.
glDrawRangeElements允许您为OpenGL提供顶点索引值的范围(包括,因为这是有意义的).你所说的是在抽奖期间得到的指数不会超过这个范围.这可以允许驱动程序执行有用的优化.该start值应该是从索引数组中获取的最低索引值,并且end应该是最高的.它应该不会仅仅是第一和最后一个顶点的索引.
| 归档时间: |
|
| 查看次数: |
5525 次 |
| 最近记录: |