2017-01-08 1 views
0

LWJGL 라이브러리를 사용하여 Eclipse에서 질감으로 png를 표시하려고합니다. 텍스처를 바인딩하고 꼭지점을 그리기 전에 좌표를 설정해야하지만 이미지는 여전히 표시되지 않습니다. 무엇이 문제 일 수 있습니까?LWJGL의 텍스처가 표시되지 않습니다.

package javagame; 

import static org.lwjgl.opengl.GL11.*; 

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 
import org.lwjgl.opengl.GL11; 
import org.lwjgl.util.Color; 
import org.newdawn.slick.opengl.Texture; 
import org.newdawn.slick.opengl.TextureLoader; 
import org.newdawn.slick.util.ResourceLoader; 

@SuppressWarnings("unused") 
public class ImageLWJGL { 
    public static Texture p; 

    public static void main(String[] args) { 
     createDisplay(); 
     createGL(); 

     render(); 

     cleanUp(); 

    } 

    private static void createDisplay(){   
     try { 
      Display.setDisplayMode(new DisplayMode(800,600)); 
      Display.create(); 
      Display.setVSyncEnabled(true); 

     } catch (LWJGLException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void createGL(){ 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity();    
     glOrtho(0, Display.getWidth(), 0, Display.getHeight(), -1, 1);  

     glMatrixMode(GL_MODELVIEW);  

     glClearColor(0,0,0,1);   
     glDisable(GL_DEPTH_TEST); 
     glEnable(GL_TEXTURE_2D); 

    } 


    private static void render(){ 
     while(!Display.isCloseRequested()){ 

     try { 
      p = TextureLoader.getTexture("PNG", 
          new FileInputStream(new  File("res/wood.png"))); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 



     glClear(GL_COLOR_BUFFER_BIT); 
     glLoadIdentity(); 

     glColor3f(0.25f,0.75f,0.5f);   


     p.bind(); 

     glBegin(GL_QUADS); 

     glTexCoord2f(0,0); 
     glVertex2f(0,0);     // (origin, origin) 

     glTexCoord2f(0,1); 
     glVertex2f(0,p.getHeight());  // (origin, y-axis)-height 

     glTexCoord2f(1,1); 
     glVertex2f(p.getWidth(),p.getHeight());  // (x-axis, y-axis) 

     glTexCoord2f(1,0); 
     glVertex2f(p.getWidth(),0);    // (x-axis, origin)-width 


     glEnd(); 

     Display.update(); 
     } 

    } 




private static void cleanUp(){ 
    Display.destroy(); 

} 

}

답변

0

귀하의 문제는 직교 투영 행렬이다.

glOrtho(0, Display.getWidth(), 0, Display.getHeight(), -1, 1);  
그것은 폭을 표시하는 0에서 진행

0은 높이를 표시하는,하지만 당신은 0 ~ 그래서 쿼드 렌더링됩니다 1. 당신의 쿼드 렌더링하지만, 작은, 당신은 그것을 볼 수있다.
문제를 해결하려면 다음을 변경하십시오.

glOrtho(0, 1, 0, 1, -1, 1);  
관련 문제