我無法弄清楚如何在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. OpenGL頂點和緩衝區
- 6. 使用頂點緩衝對象(VBO)在OpenGL ES(iPhone),以提高性能
- 7. iPhone和頂點緩衝區對象
- 8. 頂點緩衝區對象(VBO)中的OutOfMemoryError問題
- 9. 的OpenGL ES 2.0:緩衝區調整
- 10. OpenGL glBegin vs頂點緩衝區陣列VBO
- 11. 帶SDL的頂點緩衝區對象
- 12. 的OpenGL ES 2.0,使用多個頂點繪圖緩衝器
- 13. OpengGL ES頂點緩衝
- 14. 的OpenGL ES 2.0:與VBO
- 15. OpenGL ES 2.0 VBO問題
- 16. OpenGL ES 2.0頂點照明
- 17. 紋理頂點緩衝區對象
- 18. lwjgl中的多重頂點緩衝對象(VBO)
- 19. OpenGL ES深度緩衝區
- 20. OpenGL ES多色緩衝區
- 21. 渲染Kinect的點雲數據與頂點緩衝區對象(VBO)
- 22. OpenGL ES:頂點/顏色緩衝區/指針
- 23. glAccum和頂點緩衝區對象(VBO)的運動模糊等效物?
- 24. 紋理VBOs(頂點緩衝區對象)
- 25. 在C++ OpenGL中使用頂點緩衝區對象
- 26. OpenGL - 頂點緩衝區對象沒有繪製到屏幕
- 27. Java OpenGL頂點緩衝區對象不起作用
- 28. OpenGL 2.1中的頂點緩衝區對象
- 29. OpenGL 2.1:VBO中的緩衝區域
- 30. 在Android 2.3.3上不支持頂點緩衝區對象(VBO),使用GLES20
是的,這應該做我所需要的。我明天會嘗試。謝謝! – Nitrex88
如果我能在第二個例子中找到如何處理'vertices',它可能會幫助我。一個主意? –
@Stephane頂點應該使用glBufferData上傳到VBO。 –