2013-02-12 2 views
0

Я начал изучать lwjgl и получил проблему! Что я делаю:Почему полигон LWJGL исчезает после перевода z?

1.load текстура

2.Start рендеринга цикла

  1. Жеребьевка прямоугольник и применить текстуры

  2. проверка событий клавиатуры и мыши и вращать/перемещать камеру

    общественный статический void main (String [] args) { try { Display.setDisplayMode (новый DisplayMode (320, 200)); Display.create(); } catch (исключение e) { System.out.println (e); }

    Texture texture = null; 
    try { 
        texture = TextureLoader.getTexture("JPG", ResourceLoader.getResourceAsStream("basic.jpg"), true); 
    } catch (Exception e) { 
        System.out.println(e); 
        return; 
    } 
    
    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GL11.glOrtho(0, 320, 0, 200, 1, -1); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    
    while (!Display.isCloseRequested()) { 
        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); 
        Color.white.bind(); 
        texture.bind(); 
        GL11.glBegin(GL11.GL_QUAD_STRIP); 
         GL11.glTexCoord2f(0, 0); 
         GL11.glVertex3f(100, 100, 0); 
         GL11.glTexCoord2f(0, 1); 
         GL11.glVertex3f(100, 140, 0); 
         GL11.glTexCoord2f(1, 1); 
         GL11.glVertex3f(140, 140, 0); 
         GL11.glTexCoord2f(1, 0); 
         GL11.glVertex3f(140, 100, 0); 
        GL11.glEnd(); 
    
        Display.update(); 
        processInput(); 
        try { 
         //Thread.sleep(20); 
        } catch (Exception e) { 
         System.out.println(e); 
        } 
    } 
    
    Display.destroy(); 
    

    }

    государственной статической силы ProcessInput() { длиной дельта = getDelta(); длинный разделитель = 10000000; float camx = 0, camy = 0, camz = 0; float roll = 0; if (Keyboard.isKeyDown (Keyboard.KEY_W)) { camz + = 1.0f * delta/divider; } if (Keyboard.isKeyDown (Keyboard.KEY_S)) { camz - = 1.0f * delta/divider; } if (Keyboard.isKeyDown (Keyboard.KEY_D)) { camx - = 1.0f * delta/divider; } if (Keyboard.isKeyDown (Keyboard.KEY_A)) { camx + = 1.0f * delta/divider; } if (Keyboard.isKeyDown (Keyboard.KEY_SPACE)) { camy - = 1.0f * delta/divider; } if (Keyboard.isKeyDown (Keyboard.KEY_C)) { camy + = 1.0f * delta/divider; } if (Mouse.isButtonDown (0)) { roll + = 1.0f * delta/divider; } if (Mouse.isButtonDown (1)) { roll - = 1.0f * delta/divider; } GL11.glTranslatef (camx, camy, camz); GL11.glTranslatef (160, 100, 0); GL11.glRotatef (roll, 0, 0, 1); GL11.glTranslatef (-160, -100, 0); }

Когда я вращать и перемещать все в плоскости XY он прекрасно работает. Но когда я пытаюсь двигаться по оси Z, весь прямоугольник исчезает. Что я делаю неправильно?

ответ

0

Хорошо, я получил решение самостоятельно, посмотрев начальные параметры.

GL11.glOrtho(0, 320, 0, 200, 1, -1); 

Функция определяет рендеринг, и все, что из этого поля не будет отображаться. Таким образом, после перемещения по оси z элемент исчезает. Я изменил поле ввода на

GL11.glOrtho(0, 320, 0, 200, 100, -100); 

и что работает.

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