首页 > 解决方案 > 如何在 OpenGL 中只渲染 EBO 的一部分?

问题描述

我有绑定 VBO 和 EBO 的 VAO。以前我只是用glDrawElements( GL_TRIANGLES, EBO_size, GL_UNSIGNED_INT, 0 ). 但现在我想把它画成部分,中间换一些制服。也就是如果我在 EBO 中有 36 个索引;我可能想画 18 个,换个制服,然后画剩下的 18 个。

我试过glDrawRangeElements了,但它startend参数只是提示将使用哪些索引。glDrawArrays忽略 EBO 并直接从 VBO 中提取。

标签: c++opengl

解决方案


glDrawElements void* indices参数实际上是以字节为单位的起始偏移量。如您所知,GLsizei count是要绘制的元素数量(不是字节!)

例如,这将绘制一个由两部分组成的 36 个指数的 EBO:

glDrawElements( GL_TRIANGLES, 18, GL_UNSIGNED_INT, (void*)(0) )
glDrawElements( GL_TRIANGLES, 18, GL_UNSIGNED_INT, (void*)(18*sizeof(unsigned int)) )

推荐阅读