我无法弄清楚如何在iphone的opengl es 2.0中为我的地形使用顶点缓冲区对象。这是静态数据,所以我希望通过使用VBO来提高速度。在常规的OpenGL中,我使用显示列表和着色器没有问题。然而,在opengl es 2.0中,我必须将顶点数据作为属性发送给着色器,并且不知道它如何与VBO一起工作。顶点缓冲区如何知道在什么时候将顶点数据绑定到什么属性?这在opengl es 2.0中甚至可能吗?如果没有,有没有其他方法可以优化静态地形的渲染?OpenGL ES 2.0和顶点缓冲区对象(VBO)
8
A
回答
12
当然,这其实很简单,你的属性有一个位置,顶点数据馈送glVertexAttribPointer为纯顶点数组,像这样:
float *vertices = ...;
int loc = glGetAttribLocation(program, "position");
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, vertices);
对于维也纳组织,它是相同的,但你必须将缓冲区绑定到GL_ARRAY_BUFFER目标,并且glVertexAttribPointer的最后一个参数现在是缓冲区内存存储的偏移量。该指针值本身被解释为一个偏移量:
glBindBuffer(GL_ARRAY_BUFFER, buffer);
int loc = glGetAttribLocation(program, "position");
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, 0);
在这种情况下,偏移量是0,假设顶点数据在缓冲区的开始上传。偏移量是以字节为单位的度量。
然后使用glDrawArrays/glDrawElements执行绘图。希望这可以帮助!
相关问题
- 1. iPhone Cheetah 3D OpenGL ES顶点缓冲区对象(VBO)示例
- 2. 在OpenGL ES 1.1和ES 2.0中使用顶点缓冲区对象绘图
- 3. OpenGL ES 1.1顶点缓冲区对象不工作
- 4. OpenGL ES 1.1中的顶点缓冲区对象不工作
- 5. LWJGL/OpenGL顶点缓冲区对象
- 6. OpenGL顶点和缓冲区
- 7. 使用顶点缓冲对象(VBO)在OpenGL ES(iPhone),以提高性能
- 8. iPhone和顶点缓冲区对象
- 9. 顶点缓冲区对象(VBO)中的OutOfMemoryError问题
- 10. 的OpenGL ES 2.0:缓冲区调整
- 11. Vertex缓冲区对象干扰OpenGL ES 2.0中的纹理
- 12. OpenGL glBegin vs顶点缓冲区阵列VBO
- 13. 的OpenGL ES 2.0,使用多个顶点绘图缓冲器
- 14. 带SDL的顶点缓冲区对象
- 15. OpengGL ES顶点缓冲
- 16. OpenGL ES 2.0 VBO问题
- 17. 的OpenGL ES 2.0:与VBO
- 18. OpenGL ES 2.0顶点照明
- 19. 纹理顶点缓冲区对象
- 20. OpenGL ES深度缓冲区
- 21. OpenGL ES多色缓冲区
- 22. lwjgl中的多重顶点缓冲对象(VBO)
- 23. 渲染Kinect的点云数据与顶点缓冲区对象(VBO)
- 24. iOS上的OpenGL ES向缓冲区添加顶点
- 25. OpenGL ES:顶点/颜色缓冲区/指针
- 26. glAccum和顶点缓冲区对象(VBO)的运动模糊等效物?
- 27. 有没有办法在Android的OpenGL ES 2.0中使用Java中的顶点缓冲区中的对象?
- 28. Swizzling顶点数组,顶点缓冲区对象和着色器
- 29. Java OpenGL顶点缓冲区对象不起作用
- 30. OpenGL顶点缓冲区对象不显示
是的,这应该做我所需要的。我明天会尝试。谢谢! – Nitrex88
如果我能在第二个例子中找到如何处理'vertices',它可能会帮助我。一个主意? –
@Stephane顶点应该使用glBufferData上传到VBO。 –