在我的程序中,我基本上把所有的對象放在一個緩衝區中,現在我遇到問題時想繪製多個對象,如果我只畫一個它仍然有效。
當我大致將所有glDrawArrays
調到glDrawElements
調用時,以及當然所有的底層基礎架構發生時,問題開始發生。
截至目前,我只是做了一個一對一從頂點到索引的映射。DrawElements不能像預期的那樣與多個對象一起工作
我正在使用Java 8,LWJGL和OpenGL 3.3。
初始化:
//drawable vertex buffer
vertexBuffer = new StaticDrawArrayBuffer().create().bind().fillData(Drawable.putAllVertexData(drawables));
vertexArray = new VertexArrayObject().create().bind()
.setAttribute(vertexBuffer, VS_POSITION, 3, GL_FLOAT, false, 0, 0)
.enableAttributes(VS_POSITION);
//drawable elements buffer
elementBuffer = new StaticDrawElementArrayBuffer().create().bind().fillData(Drawable.putAllElementsData(drawables));
所以我做到以下幾點:
- 創建
ARRAY_BUFFER
和所有的頂點數據存儲在那裏。 - 創建一個頂點數組對象,並設置可以找到
position
數據的位置。 - 創建一個
ELEMENT_ARRAY_BUFFER
並存儲所有索引。
內容如下;
頂點數據:
-400.0
0.0
-400.0
-400.0
0.0
400.0
400.0
0.0
-400.0
-400.0
0.0
400.0
400.0
0.0
-400.0
400.0
0.0
400.0
1.0
1.0
-1.0
-1.0
1.0
-1.0
-1.0
1.0
1.0
-1.0
1.0
1.0
1.0
1.0
1.0
1.0
1.0
-1.0
1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
1.0
-1.0
-1.0
1.0
1.0
-1.0
1.0
1.0
-1.0
-1.0
-1.0
1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
1.0
-1.0
-1.0
1.0
-1.0
1.0
1.0
-1.0
1.0
-1.0
-1.0
1.0
1.0
-1.0
-1.0
1.0
1.0
-1.0
1.0
1.0
-1.0
1.0
1.0
1.0
1.0
-1.0
1.0
1.0
1.0
1.0
1.0
1.0
-1.0
1.0
1.0
-1.0
-1.0
1.0
-1.0
-1.0
1.0
1.0
-1.0
1.0
1.0
1.0
1.0
1.0
-1.0
1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
-1.0
1.0
-1.0
1.0
1.0
-1.0
指標數據:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
所以這是126浮動,應該由(x, y, z)
42指數被映射。
然而,當我做下面的調用之後:
gl.glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0)
gl.glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, 6)
的對象拿得出全部通過相互混合,絕對不是他們如何都應該看,我以爲代碼會做的是;
- 取偏移0後的前6個索引對應的頂點數據並繪製。
- 獲取偏移6後的前36個索引對應的頂點數據並繪製。
什麼可能的原因,這是行不通的?
它似乎是它需要'sizeof(GL_float)* x',而不是額外的'* 3',這可能是正確的嗎? – skiwi
@skiwi:是的,我意外地考慮了偏移到VBOs的情況,當然使用glVertexAttribPointer的size參數,您已經有了這些信息。 – datenwolf