2015-12-21 4 views
-2

Я пытаюсь сделать простой куб с этим кодом:Как нарисовать куб в LWJGL?

// x y z size 
Cube c=new Cube(25,25,0,25);//stores 8 vertexes and displays using glVertex3f 
while (!Display.isCloseRequested()) { 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(0, 100, 0, 100, 0, 100); 
    glMatrixMode(GL_MODELVIEW_MATRIX); 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    c.dis();//call to all of the glVertex3f 

    Display.update(); 
} 

При запуске программы она ничего не отображается. Я думаю, что проблема связана с glOrtho(0, 100, 0, 100, 0, 100), , но я могу ошибаться.

Беспокойство с glOrtho Я смог получить обратное лицо для отображения, но это не должно происходить, так как оно находится в задней части.

+0

... так что же делает 'c.dis'? – immibis

+0

Почему вы пытаетесь передать 'GL_MODELVIEW_MATRIX' в' glMatrixMode() '? – genpfault

ответ

1

Существует несколько различных способов визуализации объектов в lwjgl, первый - немедленный рендеринг режима. Это очень просто, но медленнее, так как он плохо использует gpu. Это позволит визуализировать 3D цветной кубик:

private void Render() { 
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); 
    GL11.glLoadIdentity(); 

    GL11.glTranslatef(0f,0.0f,-7f);    
    GL11.glRotatef(45f,0.0f,1.0f,0.0f);    
    GL11.glColor3f(0.5f,0.5f,1.0f); 

    GL11.glBegin(GL11.GL_QUADS);  
     GL11.glColor3f(1.0f,1.0f,0.0f);   
     GL11.glVertex3f(1.0f, 1.0f,-1.0f);   
     GL11.glVertex3f(-1.0f, 1.0f,-1.0f);   
     GL11.glVertex3f(-1.0f, 1.0f, 1.0f); 
     GL11.glVertex3f(1.0f, 1.0f, 1.0f); 
     GL11.glColor3f(1.0f,0.5f,0.0f);    
     GL11.glVertex3f(1.0f,-1.0f, 1.0f); 
     GL11.glVertex3f(-1.0f,-1.0f, 1.0f); 
     GL11.glVertex3f(-1.0f,-1.0f,-1.0f); 
     GL11.glVertex3f(1.0f,-1.0f,-1.0f); 
     GL11.glColor3f(1.0f,0.0f,0.0f); 
     GL11.glVertex3f(1.0f, 1.0f, 1.0f); 
     GL11.glVertex3f(-1.0f, 1.0f, 1.0f); 
     GL11.glVertex3f(-1.0f,-1.0f, 1.0f); 
     GL11.glVertex3f(1.0f,-1.0f, 1.0f); 
     GL11.glColor3f(1.0f,1.0f,0.0f); 
     GL11.glVertex3f(1.0f,-1.0f,-1.0f); 
     GL11.glVertex3f(-1.0f,-1.0f,-1.0f); 
     GL11.glVertex3f(-1.0f, 1.0f,-1.0f); 
     GL11.glVertex3f(1.0f, 1.0f,-1.0f); 
     GL11.glColor3f(0.0f,0.0f,1.0f); 
     GL11.glVertex3f(-1.0f, 1.0f, 1.0f); 
     GL11.glVertex3f(-1.0f, 1.0f,-1.0f); 
     GL11.glVertex3f(-1.0f,-1.0f,-1.0f); 
     GL11.glVertex3f(-1.0f,-1.0f, 1.0f); 
     GL11.glColor3f(1.0f,0.0f,1.0f); 
     GL11.glVertex3f(1.0f, 1.0f,-1.0f); 
     GL11.glVertex3f(1.0f, 1.0f, 1.0f); 
     GL11.glVertex3f(1.0f,-1.0f, 1.0f); 
     GL11.glVertex3f(1.0f,-1.0f,-1.0f); 
    GL11.glEnd();  

} 

Более эффективным тогда, призывающую все ваши рендеринга индивидуально, есть метод называется созданный display lists. Список дисплеев - это немедленный способ рендеринга в непосредственном режиме с большей эффективностью, так как существует меньшее количество запросов glBegin, glEnd, что снижает нагрузку на процессор. Here вы можете узнать о списках отображения.

Самый быстрый способ, который вы можете сделать в lwjgl, - это VBO. Что такое VBO?

Объект буфера вершин (короткое время для VBO) является объектом буфера OpenGL для буферизации данных вершин в VRAM, чтобы сделать рендеринг быстрее. Это похоже на списки отображения, в которых список отображения кэшируется в VRAM и выполняется оттуда, что дает более высокий FPS.

Here - это ссылка, чтобы узнать больше об использовании VBOs.

+0

, который не решает мою проблему, но я проверю VBO.thanks! – boop

Смежные вопросы