- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我花了半天时间试图解决这个问题,但到目前为止我没有运气,所以我正在寻找一些建议和指导。
我正在我的 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 位),所以我需要更多的索引来渲染一个球体。
但是,当我尝试这样做时(请注意第 3 个参数从“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”可以工作?
提前致谢。这让我抓狂。
最佳答案
问题不在于 glBufferData()
。您可以将 GLuint
值存储在缓冲区中。
限制是 ES 2.0 不支持 GL_UNSIGNED_INT
作为索引类型。来自 man page 上 glDrawElements()
的“type”参数的描述:
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 - 适用于 iOS 的 OpenGLES - glBufferData() - GLuint 不适用于数据字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26686731/
我是一名优秀的程序员,十分优秀!