내 프로그램에서 기본적으로 모든 객체를 하나의 버퍼에 넣었는데, 이제 여러 객체를 그리려고 할 때 문제가 발생합니다. 하나만 그려도 여전히 작동합니다.
이 문제는 내가 대략적으로 모든 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));
그래서 다음을 수행합니다.
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 개의 float이고, 그것은 (x, y, z)
42 개의 인덱스 에 의해 매핑되어야합니다 .
그러나 나중에 다음 호출을 수행하면 :
gl.glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0)
gl.glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_INT, 6)
객체는 모두 서로 섞여서 그려집니다. 분명히 그들이 어떻게 보이는지가 아니라 코드가 할 것이라고 생각한 것입니다.
이것이 작동하지 않는 가능한 이유는 무엇입니까?
glDrawElements 마지막 매개 변수가 인덱스 배열에 대한 포인터로 사용되었습니다. VBO에서이 매개 변수는 VBO에 대한 바이트 크기 오프셋으로 재사용됩니다. 따라서 인덱스를 사용하지 않고 데이터가 시작되는 VBO 로의 바이트 오프셋을 사용합니다. 귀하의 경우 sizeof(GLfloat) * x
에는 sizeof(GLfloat)
일반적으로 4입니다. 따라서 특정 데이터 레이아웃을 곱해야 바이트 오프셋을 얻으려면 오프셋 인덱스에 4를 곱해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다