关于glDrawRangeElements()的问题
Questions about glDrawRangeElements()
我试图使用glDrawRangeElements()命令渲染一些旧的级别数据。顶点设置正确,索引设置正确,但似乎无法渲染。我终于在网上查了一下,发现了下面的例子:http://www.songho.ca/opengl/gl_vertexarray.html
从这个例子来看,我认为我做错了。显然,开始是一个索引值,结束是一个索引值,而不是索引数组的索引。例如,我假设如果你想渲染10个三角形,那么开始是0,结束是29,计数是30。但我显然错了?
只有当索引值为0,而29实际上是0和29时,这才是正确的。因此,如果索引以400开始,以452结束,则对同一数组的调用将改为
glDrawRangeElements(GL_TRIANGLES, 400, 452, 29, GL_UNSIGNED_BYTE, indices);
正确吗?还有人认为这有点违反直觉吗?关于顶点数组还有什么建议吗?
首先,让我们谈谈glDrawElements
,因为Range版本只是对它的修改。count
是要从源索引数组中提取并呈现的索引数。每个索引都映射到一个顶点。所以如果你的count
是"29",那么你正在尝试渲染29个顶点。如果使用GL_TRIANGLES
,这将只呈现27个顶点,因为每个三角形需要三个顶点。OpenGL将丢弃额外的。
所以如果你想要呈现30个索引,你把30作为计数。
现在我们知道如何使用glDrawElements
,让我们谈谈glDrawRangeElements
。当通常使用glDrawElements
时,您在源索引数组中指定要从中提取的位置。indices
和count
参数告诉OpenGL在哪里找到索引。但是从这个数组中提取的实际索引可以是在源顶点数组索引的边界内的任何地方。
glDrawRangeElements
允许你给OpenGL一个范围(包括,因为这是有意义的)顶点索引值。你说的是它在这个draw调用期间得到的索引不会超过那个范围。这可以允许驱动程序执行有用的优化。start
的值应该是从索引数组中得到的最低的索引值,而end
的值应该是最高的。它应该而不是仅仅是第一个和最后一个顶点的索引。
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 使用mongocxx驱动程序时包含头文件问题