Я пытаюсь читать и создавать VBO из ArrayList, а затем визуализировать его. Проблема в том, что я просто рисую пустой экран. Все работало нормально, когда я сразу же его визуализировал; только теперь с VBO это не работает.Vertex Buffer Object из ArrayList?
Игровой цикл выглядит следующим образом: с функциями вызова камеры glTranslate и glRotate.
game.clearScreen();
Camera.update(delta);
try {
game.render();
} catch (IOException e) {
System.out.println(e);
}
Display.update();
Display.sync(FRAME_RATE);
метод визуализации:
world.render(vertices,colorVertices);
FloatBuffer VertexPositionData = BufferUtils.createFloatBuffer(vertices.size());
float[] floats = new float[vertices.size()];
int i = 0;
for (Float f : vertices) {
floats[i] = Float.intBitsToFloat(Float.floatToIntBits(f));
i++;
}
VertexPositionData.put(floats);
VertexPositionData.flip();
FloatBuffer VertexColorData = BufferUtils.createFloatBuffer(colorVertices.size());
float[] colorFloats = new float[colorVertices.size()];
int j = 0;
for (Float f : colorVertices) {
colorFloats[j] = Float.intBitsToFloat(Float.floatToIntBits(f));
j++;
}
VertexColorData.put(colorFloats);
VertexColorData.flip();
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,VBOVertexHandle);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER,VertexPositionData,GL15.GL_STATIC_DRAW);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,0);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,VBOColorHandle);
GL15.glBufferData(GL15.GL_ARRAY_BUFFER,VertexColorData,GL15.GL_STATIC_DRAW);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER,0);
GL11.glPushMatrix();
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOVertexHandle);
GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0L);
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, VBOColorHandle);
GL11.glColorPointer(3, GL11.GL_FLOAT, 0, 0L);
GL11.glDrawArrays(GL11.GL_QUADS, 0, vertices.size()/3);
GL11.glPopMatrix();
В ArrayLists есть вершины и связанные цвета. Каждый воксел добавляет свои вершины в ArrayList (вместо того, чтобы немедленно разорвать его).
Я добавил методы состояния glEnableClient, но он по-прежнему рисует пустой экран. И ArrayList удерживает Floats объект, который я конвертирую в массив с плавающей точкой. –
вы используете 'glGenBuffers()' для создания дескрипторов где-то? Также вы должны просто просто поместить Floats в float, прежде чем добавлять их в свой буфер, как этот 'for (Float f: colorVertices) {VertexColorData.put ((float) f);}' Просто заметили, что вы используете 'glPushMatrix() 'и' glPopMatrix' до и после рисования, которые не нужны, push и pop используются для сохранения текущей матрицы, а затем перезагружают ее позже после того, как вы применили к ней преобразования, которые вы хотите отменить. Я не замечаю ничего другого, что могло бы быть проблемой из того, что вы опубликовали. – Alex