我無法弄清楚如何在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。 –