【问题标题】:How to render only a part of EBO in OpenGL?如何在 OpenGL 中只渲染 EBO 的一部分?
【发布时间】:2020-08-10 15:51:25
【问题描述】:

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

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

【问题讨论】:

  • glDrawElements 函数中的最后一个参数是 EBO 的偏移量。如果您通过0,则它会从头开始。如果您通过i * sizeof(uint32_t),则它从ith 索引开始。

标签: c++ opengl


【解决方案1】:

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)) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    相关资源
    最近更新 更多