2012-06-28 51 views
-3

我做了一些代碼,每次我的代碼在我的關卡圖像中遇到一個白色像素時,都會生成一些代碼。但是,它似乎並不奏效。它只有在我註釋掉圖像部分的實際加載時纔有效。爲什麼我無法從OpenGL中的圖像文件加載矩形?

 GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GL11.glOrtho(-5, 5, -5, 5, -20, 20); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    float camPosX=0, camPosY=0; 
    for(int i=0;i<level.getWidth();i++){ 
     for(int j=0;j<level.getHeight();j++){ 
      if(level.getRGB(i, j)==Color.red.getRGB()){camPosX=i;camPosY=j;} 
     } 
    } 
    System.out.println("Camera position is "+camPosX+", "+camPosY); 
    int x=0; 
    while (!Display.isCloseRequested()) { 
     Display.sync(60); 
     //poll for keypresses first, default key is 'forward' 
     if(Keyboard.isKeyDown(Keyboard.KEY_NUMPAD8)); 



     GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT|GL11.GL_COLOR_BUFFER_BIT); 
     //GL11.glEnable(GL11.GL_CULL_FACE); 
     GL11.glEnable(GL11.GL_DEPTH_TEST); 
     GL11.glColor3f(0, 0, 0); 
     for(int i=0;i<level.getWidth();i++){ 
      for(int j=0;j<level.getHeight();j++){ 
       if(level.getRGB(i, j)==Color.WHITE.getRGB()){ 
        GL11.glTranslatef(-i, 0, -j); 
        GL11.glRotatef(45, 1, 1, 1); 
        GL11.glBegin(GL11.GL_QUADS); 
        GL11.glColor3f(1.0f,0.0f,0.0f);   // Set The Color To Red 
        GL11.glVertex3f(0.5f, 0.5f, 0.5f);   // Top Right Of The Quad (Front) 
        GL11.glVertex3f(-0.5f, 0.5f, 0.5f);   // Top Left Of The Quad (Front) 
        GL11.glVertex3f(-0.5f,-0.5f, 0.5f);   // Bottom Left Of The Quad (Front) 
        GL11.glVertex3f(0.5f,-0.5f, 0.5f);   // Bottom Right Of The Quad (Front) 
        GL11.glVertex3f(0.5f,-0.5f,-0.5f);   // Bottom Left Of The Quad (Back) 
        GL11.glVertex3f(-0.5f,-0.5f,-0.5f);   // Bottom Right Of The Quad (Back) 
        GL11.glVertex3f(-0.5f, 0.5f,-0.5f);   // Top Right Of The Quad (Back) 
        GL11.glVertex3f(0.5f, 0.5f,-0.5f);   // Top Left Of The Quad (Back) 
        GL11.glVertex3f(-0.5f, 0.5f, 0.5f);   // Top Right Of The Quad (Left) 
        GL11.glVertex3f(-0.5f, 0.5f,-0.5f);   // Top Left Of The Quad (Left) 
        GL11.glVertex3f(-0.5f,-0.5f,-0.5f);   // Bottom Left Of The Quad (Left) 
        GL11.glVertex3f(-0.5f,-0.5f, 0.5f);   // Bottom Right Of The Quad (Left) 
        GL11.glVertex3f(0.5f, 0.5f,-0.5f);   // Top Right Of The Quad (Right) 
        GL11.glVertex3f(0.5f, 0.5f, 0.5f);   // Top Left Of The Quad (Right) 
        GL11.glVertex3f(0.5f,-0.5f, 0.5f);   // Bottom Left Of The Quad (Right) 
        GL11.glVertex3f(0.5f,-0.5f,-0.5f);   // Bottom Right Of The Quad (Right) 
        GL11.glEnd(); 
        GL11.glLoadIdentity(); 
       } 
      } 
     } 
     GL11.glTranslatef(-camPosX, 0, -camPosY); 
     Display.update(); 
    } 

回答

0

在您生成箱主循環,你可能想要做

... 
if(level.GetRGB(i, j)==Color.WHITE.getRGB()) { 
    GL11.glPushMatrix(); // store current matrix 
    GL11.glTranslatef(-i, 0, -j); 
    ... 
    GL11.glPopMatrix(); // instead of GL11.glLoadIdentity() 
} 

GL11.glTranslatef(-camPosX, 0, -camPosY); 

可能沒有你想象的那樣。它對以下呼叫Display.update()沒有任何影響。但是,影響您主循環的下一次運行,因爲您在主循環的開始時不會調用GL11.glLoadIdentity()。我建議將它移到主循環的開頭,並在之前調用glLoadIdentity()

+0

它仍然沒有正常顯示(仍然是黑屏),但我很高興這些問題得到解決。謝謝! – striking

相關問題