c++ - 如何在 OpenGL 中只渲染 EBO 的一部分?
问题描述
我有绑定 VBO 和 EBO 的 VAO。以前我只是用glDrawElements( GL_TRIANGLES, EBO_size, GL_UNSIGNED_INT, 0 )
. 但现在我想把它画成部分,中间换一些制服。也就是如果我在 EBO 中有 36 个索引;我可能想画 18 个,换个制服,然后画剩下的 18 个。
我试过glDrawRangeElements
了,但它start
和end
参数只是提示将使用哪些索引。glDrawArrays
忽略 EBO 并直接从 VBO 中提取。
解决方案
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)) )
推荐阅读
- android - Flutter 返回 `lifecycle-common-java8.jar (androidx.lifecycle:lifecycle-common-java8:2.0.0)` 错误
- django - Django ManytoManyField 的限制选项
- android - 什么是在本地为 iOS/Android 存储大数据的最佳方式
- r - 事后三向交互方差分析
- ruby - 了解 Chef 环境属性
- java - 属性中带有 ObjectId 的 MongoDB 文档
- linux - Unix diff 与上下文并排
- r - 创建日期的 df 以传递给 purrr 函数
- python - 使用python从pandas中的嵌套字典中获取特定键的值
- html - CSS 未应用于 Angular 应用程序