Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在OpenGL中仅渲染EBO的一部分?_C++_Opengl - Fatal编程技术网

C++ 如何在OpenGL中仅渲染EBO的一部分?

C++ 如何在OpenGL中仅渲染EBO的一部分?,c++,opengl,C++,Opengl,我有绑定VBO和EBO的VAO。以前我只是用glpaurements(GL\u三角形,EBO\u大小,GL\u UNSIGNED\u INT,0)来渲染它。但现在我想把它分成几部分,中间换些制服。如果我有36个EBO指数;我可能想画18张,换一下制服,然后画剩下的18张 我尝试了glDrawRangeElements,但它的start和end参数只是将使用哪些索引的提示glDrawArrays忽略EBO并直接从VBO中提取。glDrawElementsvoid*index参数实际上是以字节为单位

我有绑定VBO和EBO的VAO。以前我只是用
glpaurements(GL\u三角形,EBO\u大小,GL\u UNSIGNED\u INT,0)来渲染它
。但现在我想把它分成几部分,中间换些制服。如果我有36个EBO指数;我可能想画18张,换一下制服,然后画剩下的18张


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

glDrawElements
void*index
参数实际上是以字节为单位的起始偏移量。正如您所知,
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)) )

glpaurements
函数中的最后一个参数是EBO中的偏移量。如果通过
0
,则它将从头开始。如果通过
i*sizeof(uint32\u t)
,则它从
i
th索引开始。