当谈到我应该用于我的OpenGL延迟渲染的函数时,我有点困惑 .
我有一个VBO列表(顶点缓冲对象)
每一个代表一种类型的顶点,如一个可能是(位置颜色)
我也有一个用于减价
当我想渲染不同的对象时,我的问题来了
我使用directX方式,你1)激活你的顶点缓冲区2)激活你的索引缓冲区3)然后你在绘图调用上指定你的原始类型从顶点缓冲区的起始顶点,最小顶点索引,顶点计数,开始指责和原始计数
与openGL失去因为我可以使用:
glDrawElements - 但它使用渲染模式,对象计数,indice字节类型和索引
这基本上告诉我它将在VBO的开头呈现,如果我有多个对象,它将无法帮助我 .
任何人都知道openGL具有什么渲染功能,我可以在VBO中指定从哪里开始渲染并指定我的起始顶点位置?我希望有人有任何想法= \
3 回答
你有几个选择 .
您可以在绘制该对象之前通过发出更多
glVertexAttribPointer
调用来重新定位每个特定对象的顶点数据的开始 . 或者你可以使用glDrawElementsBaseVertex,在那里你可以指定一个顶点索引,该索引可以添加所有索引 .后者应该可以在任何仍然支持的非英特尔硬件上使用 .
glDrawElements不是从VBO的开头开始,而是从指定start的指针开始 .
如果你有一个VBO并且你想从它的后半部分开始渲染,那么你将字节偏移设置为从glVertexAttribPointer的最后一个属性开始 .
编辑:我刚刚意识到,如果你不使用着色器,这可能不适用,但由于我不熟悉传统的OpenGL,我不确定我的帖子对你有什么好处 . 您使用/定位的是什么版本?
我最近问了一个关于glDrawElements here的问题 . 希望我发布的内容给出一些解释/示例 .
我理解它的方式:你的索引是由你决定的,所以如果你想从第二个顶点开始,你可以尝试(一个基本的骨架,没有glVertexAttribPointer调用等,但我可以添加那些,如果你想):
其中GL_TRIANGLES是基元的类型,3是“索引”内部的元素数,GL_UNSIGNED_BYTE是如何解释它们,“indices”只是数组的名称 .
这应该只绘制第二个三角形 . 您也可以尝试glDrawElementsBaseVertex,但我自己并没有亲自尝试过 . 我收集的是你将从0开始生成/显式编码你的索引,但给出一个偏移量,使它实际读取0偏移量,1偏移量,依此类推 .
这有帮助吗?