Объект буфера вершин LWJGL не отображаетсяJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Объект буфера вершин LWJGL не отображается

Сообщение Anonymous »

Я написал простой код VBO для своих 3D-моделей. Я делаю 3 буфера для вершин, цветов и нормалей. Он не выдает никаких ошибок, но и не рендерит. Как я могу это исправить?
Это мой код (я использую фиксированный конвейер рендеринга):

Код: Выделить всё

public class OptimizedModel3d  extends Model3d{
int len;
int vbo_vertex_handle;
FloatBuffer vertex_data;
int vbo_color_handle;
FloatBuffer color_data;
int vbo_normal_handle;
FloatBuffer normal_data;
public OptimizedModel3d(ColorfulTriangle[] mess, Model3d model3d){
super(mess);
Mesh = null;
ColorfulTriangle[] mesh = model3d.Mesh;
ignoreillum = model3d.ignoreillum;
transparent = model3d.transparent;
vertex_data = BufferUtils.createFloatBuffer(mesh.length*9);
color_data = BufferUtils.createFloatBuffer(mesh.length*12);
normal_data = BufferUtils.createFloatBuffer(mesh.length*9);
len = mesh.length*3;
for(ColorfulTriangle i: mesh){
for(int j = 0; j < 3; j++) {
vertex_data.put(i.Vertexes3f[j]);
normal_data.put(i.Normales3f[j]);
color_data.put(i.Color4f);
}
}
vertex_data.flip();
color_data.flip();
normal_data.flip();
vbo_vertex_handle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vbo_vertex_handle);
glBufferData(GL_ARRAY_BUFFER, vertex_data, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
vbo_color_handle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vbo_color_handle);
glBufferData(GL_ARRAY_BUFFER, color_data, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
vbo_normal_handle = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vbo_normal_handle);
glBufferData(GL_ARRAY_BUFFER, normal_data, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}

@Override
public void Display(){
if(ignoreillum){
glDisable(GL_LIGHTING);
}
glBindBuffer(GL_ARRAY_BUFFER, vbo_vertex_handle);
glVertexPointer(3, GL_FLOAT, 0, 0l);

glBindBuffer(GL_ARRAY_BUFFER, vbo_color_handle);
glColorPointer(4, GL_FLOAT, 0, 0l);

glBindBuffer(GL_ARRAY_BUFFER, vbo_normal_handle);
glVertexPointer(3, GL_FLOAT, 0, 0l);

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);

glDrawArrays(GL_TRIANGLES, 0, 9);

glEnableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
if(ignoreillum){
glEnable(GL_LIGHTING);
}
}
@Override
public void CleanUp(){
glDeleteBuffers(vbo_vertex_handle);
glDeleteBuffers(vbo_color_handle);
glDeleteBuffers(vbo_normal_handle);
}
}

Если я использую glBegin/ Vertex3f и т. д. вместо VBO все работает хорошо, но я хочу улучшить производительность рендеринга.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -rendering
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»