我花了半天时间试图解决这个问题,但到目前为止我没有运气,所以我正在寻找一些建议和指导。
我正在我的 32 位 iPad3 (iOS 8) 上渲染一个球体。
-(void) bufferVBO objectVertex[])objVertices int)objectVerticesSize
GLubyte[])vertexIndices int)vertexIndicesSize
{
...
glBufferData(GL_ELEMENT_ARRAY_BUFFER, vertexIndicesSize, vertexIndices, GL_STATIC_DRAW);
...
}
效果很好。但是,这最多只能渲染 256 个索引(因为 GLubyte 只有 8 位),所以我需要更多来渲染球体。
但是,当我尝试这样做时(注意第三个参数从“GLubyte”更改为“GLunit”):
-(void) bufferVBO objectVertex[])objVertices int)objectVerticesSize
GLuint[])vertexIndices int)vertexIndicesSize
{
...
glBufferData(GL_ELEMENT_ARRAY_BUFFER, vertexIndicesSize, vertexIndices, GL_STATIC_DRAW);
...
}
这行不通。我的屏幕上没有呈现任何内容。在(Mac)桌面应用程序上,我能够传入 GLuint 以渲染我的球体没有问题。但是,在我的 32 位 iPad 3 上,什么都没有显示(除非我使用 GLubyte,它没有渲染一个只有 256 个索引的完整球体)。
那么,为什么“GLuint”在传递索引数组时对 glBufferData() 不起作用?为什么只有“GLubyte”可以工作?
提前谢谢你。这让我发疯了。
Best Answer-推荐答案 strong>
问题不在于 glBufferData() 。您可以将 GLuint 值存储在缓冲区中。
限制是 ES 2.0 不支持 GL_UNSIGNED_INT 作为索引类型。来自 man page 上 glDrawElements() 的“类型”参数的描述:
Specifies the type of the values in indices. Must be GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT.
ES 3.0 和完整的 OpenGL 支持此参数的 GL_UNSIGNED_INT 。还有一个 ES 1.x 和 2.0 的扩展允许实现支持它:OES_element_index_uint .
你可以在 ES 2.0 中使用 GLushort 类型作为索引,GL_UNSIGNED_SHORT 对应于 glDrawElements() 的“类型”参数 。这为您提供了 65,536 个索引的范围。
关于ios - OpenGLES for iOS - glBufferData() - GLuint 不适用于数据字段,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/26686731/
|