2012-06-08 73 views
1

我recevie 0錯誤,但我得到這個在控制檯:問題與「GL11.glMatrixMode()」

>Exception in thread "main" java.lang.NullPointerException 
    >>at org.lwjgl.opengl.GL11.glMatrixMode(GL11.java:2052) 
    >>>at game.engine.GameLoop.start(GameLoop.java:22) 
    >>>>at game.engine.GameLoop.main(GameLoop.java:15) 

我試圖把實際值轉換成「glMatrixMode()」而不是「GL11.GL_PROJECTION 「但它返回相同的異常。

import org.lwjgl.LWJGLException; 
    import org.lwjgl.opengl.DisplayMode; 
    import org.lwjgl.opengl.GL11; 
    import org.lwjgl.util.Display; 


    public class GameLoop 
    { 
     //Main 
      public static void main(String[] argv) 
      { 
       GameLoop.start(); 
      } 

      //Metodo che gestisce il loop 
      public static void start() 
      { 
       //Inizializzazione OpenGL 
       GL11.glMatrixMode(GL11.GL_PROJECTION); 
       GL11.glLoadIdentity(); 
       GL11.glOrtho(0, 800, 600, 0, 1, -1); 
       GL11.glMatrixMode(GL11.GL_MODELVIEW); 

       try 
       { 
        Display.setDisplayMode(new DisplayMode(800, 600)); 
        Display.create(); 
       } catch (LWJGLException e) 
       { 
        e.printStackTrace(); 
        System.exit(0); 
       } 

       while(!Display.isCloseRequested()) 
       { 
        Entità.pulisci(); 
        Entità.colora(); 
        Entità.disegna(); 
        Display.update(); 
       } 
      } 

    } 




    import org.lwjgl.opengl.GL11; 

    public class Entità 
    { 
     //Disegna un poligono 
      public static void disegna() 
      { 
       GL11.glBegin(GL11.GL_QUADS); 
       GL11.glVertex2f(100,100); 
       GL11.glVertex2f(200,100); 
       GL11.glVertex2f(200,200); 
       GL11.glVertex2f(100,200); 
       GL11.glEnd(); 
      } 

      //Pulisce il buffer 
      public static void pulisci() 
      { 
       GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); 
      } 

      //Setta il colore al poligono 
      public static void colora() 
      { 
       GL11.glColor3f(0.5f,0.5f,1.0f); 
      } 

    } 

回答

3

我沒有使用Java或LWJGL任何經驗,但看你的代碼似乎

Display.setDisplayMode(new DisplayMode(800, 600)); 
Display.create(); 

創建實際的顯示畫布(或者無論你可以稱呼它)還套建立OpenGL上下文。因此,在可能導致一些錯誤之前調用任何OpenGL函數(如GL11.glMatrixMode),就像在你的情況下是空指針異常一樣。

因此,儘量在顯示創建後放置這四個功能。您正在對OpenGL上下文進行更改,因此您首先需要一個有效的上下文。

+0

你剛剛做了我的一天,先生;)!非常感謝你! –