簡體   English   中英

OpenGL ES 2.0和頂點緩沖對象(VBO)

[英]OpenGL ES 2.0 and vertex buffer objects (VBO)

我無法弄清楚如何在opengl es 2.0 for iphone中為我的地形使用頂點緩沖區對象。 這是靜態數據所以我希望通過使用VBO來提高速度。 在常規OpenGL中,我使用顯示列表和着色器沒問題。 但是,在opengl es 2.0中,我必須將頂點數據作為屬性發送到着色器,並且不知道它如何與VBO一起工作。 頂點緩沖區如何知道它在調用時將頂點數據綁定到哪個屬性? 這在opengl es 2.0中是否可行? 如果沒有,還有其他方法可以優化我的地形渲染是靜態的嗎?

當然,實際上這很簡單,你的屬性有一個位置,頂點數據用glVertexAttribPointer提供,用於普通的頂點數組,如下所示:

float *vertices = ...;
int loc = glGetAttribLocation(program, "position");
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 0, vertices);

對於VBO,它是相同的,但您必須將緩沖區綁定到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執行繪圖。 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM