- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 glDrawRangeElements() 命令渲染一些旧的关卡数据。我的顶点设置正确,索引设置正确,但我似乎无法渲染它。我终于在网上查了一下,发现了这里的例子:http://www.songho.ca/opengl/gl_vertexarray.html
从这个例子来看,我认为我一直做错了。显然,开始是一个索引值,结束是一个索引值,而不是 indices 数组的索引。我假设,例如,如果你想渲染 10 个三角形,开始为 0,结束为 29,计数为 30。但我显然错了?
只有当 0 和 29 处的索引值实际上是 0 和 29 时,这才是正确的。因此,如果索引以 400 开始并以 452 结束,则对同一数组的调用将改为
glDrawRangeElements(GL_TRIANGLES, 400, 452, 29, GL_UNSIGNED_BYTE, indices);
这样对吗?有没有人认为这有点违反直觉?关于顶点数组还有其他建议吗?
最佳答案
首先,让我们谈谈glDrawElements
,因为 Range 版本只是对其的修改。 count
是要从源索引数组中提取以呈现的索引数。每个索引将 map 拉到一个顶点。因此,如果您的 count
是“29”,那么您正在尝试渲染 29 个顶点。如果您使用 GL_TRIANGLES
,这只会渲染 27 个顶点,因为每个三角形需要三个顶点。 OpenGL 将丢弃额外的内容。
所以如果你想渲染 30 个索引,你就把 30 作为计数。
现在我们知道了如何使用glDrawElements
,让我们来谈谈glDrawRangeElements
.通常使用 glDrawElements
时,您可以在源索引数组中指定一个位置以从中提取。 indices
和 count
参数告诉 OpenGL 在哪里找到索引。但是从这个数组中提取的实际索引可以在源顶点数组索引边界内的任何地方。
glDrawRangeElements
允许您为 OpenGL 提供一个范围(包括在内,因为这是有意义的)顶点索引值。你的意思是它在这次绘制调用期间获得的索引不会超过该范围。这可以让驱动程序执行有用的优化。 start
值应该是将从索引数组中获取的最低索引值,end
应该是最高值。它应该不只是第一个和最后一个顶点的索引。
关于c++ - 关于 glDrawRangeElements() 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549991/
我想绘制两个立方体,它们之间有一个矩形,所以我将顶点数据存储到一个 vbo 中,然后我创建了一个 ebo(元素缓冲区对象)以避免额外的顶点(42 对 12)。我需要单独绘制它们,因为我希望矩形反射(r
我在使用 glDrawRangeElements() 时遇到了一些问题。基本上,我将给定模型中的每个网格都保存在相同的顶点/索引缓冲区中,并使用 glDrawRangeElements() 有选择地绘
这是我之前问题的后续问题。我的所有问题都在我的上一个线程中得到了解答,但这是我遇到的一个新错误。在中间模式下渲染时,一切看起来都很棒。 事实上: http://i.imgur.com/OFV6i.pn
我正在尝试使用 glDrawRangeElements() 命令渲染一些旧的关卡数据。我的顶点设置正确,索引设置正确,但我似乎无法渲染它。我终于在网上查了一下,发现了这里的例子:http://www.
基于 Questions about glDrawRangeElements() 中的信息并给出以下项目: struct MyVertex { GLfloat x, y, z; /
我正在尝试使用 glDrawRangeElements 从 VBO 和元素缓冲区对象渲染点。 VBO 和 EBO 是这样实例化的: glGenBuffers(1, &vertex_buffer
我是一名优秀的程序员,十分优秀!