gpt4 book ai didi

java - DrawElements 无法按预期处理多个对象

转载 作者:行者123 更新时间:2023-11-30 09:11:15 24 4
gpt4 key购买 nike

在我的程序中,我基本上将所有对象放在一个缓冲区中,现在当我想绘制多个对象时遇到问题,如果我只绘制一个它仍然有效。
当我粗略地将所有 glDrawArrays 更改为 glDrawElements 调用,当然还有所有底层基础设施时,问题开始出现。
到目前为止,我只是做了一个从顶点到索引的一对一映射。

我正在使用 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));

所以我做了以下事情:

  1. 创建一个 ARRAY_BUFFER 并将所有顶点数据存储在其中。
  2. 创建一个顶点数组对象,并设置可以找到位置数据的位置。
  3. 创建一个 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 个 float ,应该通过 (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个索引对应的顶点数据绘制。

这不起作用的可能原因是什么?

最佳答案

glDrawElements 的最后一个参数曾经是指向索引数组的指针。对于 VBO,此参数被重用为 VBO 中的字节大小的偏移量。所以它不需要索引,而是 VBO 中数据开始位置的字节偏移量。在你的情况下,这将是 sizeof(GLfloat) * x 其中 sizeof(GLfloat) 通常是 4。所以你必须乘以你必须乘以偏移量的特定数据布局按 4 索引以获得字节偏移量。

关于java - DrawElements 无法按预期处理多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22200461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com