저는 LWJGL을 가지고 놀았으며 원래는 두 개의 VBO를 사용하여 임의의 속도와 색상으로 큐브를 만드는 3D 공간을 만들었습니다 색깔).LWJGL - Interleaved VBO는 의도 한대로 작동하지 않습니다.
하나의 인터리브 된 VBO로 작동 시키려고 노력하고 있지만, 지금까지의 시도로 인해 단색, 단색으로 큐브가 '깜박'색과 여러 색으로 그려집니다. 꼭지점/색상에 대한 시작 위치 및 보폭과 관련하여 오류가있는 것처럼 보이지만 주위를 변경하면 도움이되지 않거나 아주 이상한 효과가 나타납니다. ,
package test3D.first.main;
import java.nio.FloatBuffer;
import java.util.ArrayList;
import org.lwjgl.BufferUtils;
import test3D.first.entities.*;
import test3D.first.main.threads.Updater;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL15.*;
public class InterleavedDrawer {
private int vboHandle;
private static FloatBuffer drawData;
final static int vertexSize = 3;
final static int colorSize = 3;
final static int normalSize = 3;
private static int vertexQuantity;
public InterleavedDrawer() {
initialise();
}
private void initialise() {
drawData = BufferUtils.createFloatBuffer(0);
vboHandle = glGenBuffers();
updateBuffers(Updater.objects);
}
public void draw() {
glBindBuffer(GL_ARRAY_BUFFER, vboHandle);
glVertexPointer(vertexSize, GL_FLOAT, 1, 0L);
glColorPointer(colorSize, GL_FLOAT, 1, 4L);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawArrays(GL_TRIANGLES, 0, vertexQuantity);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
}
public void update() {
for (int i = 0; i < Updater.getObjectQuantity(); i++) {
drawData.put(Updater.objects.get(i).getVertices());
drawData.put(Updater.objects.get(i).getColors());
}
drawData.flip();
glBindBuffer(GL_ARRAY_BUFFER, vboHandle);
glBufferData(GL_ARRAY_BUFFER, drawData, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
public void clear() {
drawData.clear();
}
private void updateBuffers(ArrayList<AbstractEntity> objects) {
vertexQuantity = 0;
drawData.clear();
for (int i = 0; i < objects.size(); i++) {
vertexQuantity += objects.get(i).getVertexQuantity();
}
drawData = BufferUtils.createFloatBuffer(vertexSize * vertexQuantity + colorSize * vertexQuantity);
}
}
내가 말했듯이 :
다음은 VBO를 만드는 클래스의 코드 (이 비 인터리브 버전으로 잘 작동하고 동등한 방법을 포함하고 있기 때문에 다른 곳에서 오류가 없도록한다)의 그들은 원인은 이상하게 색깔있는 큐브에서 '지역'을 만들어 4에 glColorPointer()에서 긴 값을 변경, 홀수 깜박이는 효과만큼 값을 떠나
glVertexPointer(vboHandle, GL_FLOAT, 1, 0L);
glColorPointer(vboHandle, GL_FLOAT, 1, 3L);
: 나는 오류가 라인에서 오는 의심 (0, 0, 0), (1, 0, 0), (0, 1, 0) 등등. 색상이 완전히 임의의 수레이기 때문에 어떤 의미가 없으며, 시도한 다른 값은 첫 번째 효과 이외의 다른 것을하지 않는 것 같습니다. 여기 값이나 다른 것을 오용하고 있습니까? 모든 도움을 매우 많이 감사드립니다, 미리 감사드립니다 :)
로 변경해야합니다, 그러나 그것은 단지 검은 화면을 낳습니다 - 24와 12 이하의 값 조합은 미친 영상을줍니다 ... 왜 이것이일까요? 지금까지 입력 해 주셔서 감사합니다 :) – ACraftyMarmoset
버텍스/색상 데이터의 인터리빙에 문제가 있습니다. 내 대답을 업데이트했습니다. –
그게 다야! 고맙습니다. OpenGL이 버퍼를 포맷해야한다고 생각했던 것만 큼 많이 알았습니다. :) 좋은 하루 되세요! – ACraftyMarmoset