2013-08-28 4 views
0

많은 것을 시도했지만 지금까지 아무 것도 작동하지 않았습니다. 처음에는 문제는 프로그램을 실행할 때 빈 화면이 있다는 것입니다. 마침내 빈 흰색 사각형을 표시했습니다. 내 이미지는 128x128이고 다른 이미지는 512x512입니다.Java lwjgl 및 slick이 내 텍스처를 표시하지 않습니다.

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.FileNotFoundException; 
import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 
import org.lwjgl.opengl.GL11; 
import org.newdawn.slick.Color; 
import org.newdawn.slick.opengl.Texture; 
import org.newdawn.slick.opengl.TextureLoader; 
import org.newdawn.slick.util.ResourceLoader; 
import org.lwjgl.input.Mouse; 
import java.util.Random; 

public class TextureDemo 
{ 
private static Texture wood; 
Random random = new Random(); 

    public TextureDemo() 
{ 
    initGL(640, 480, "SLICK TEXTURES"); 
loadTexture("mozilla"); 

int x = 100, y = 100, count = 0, width = 0, height = 0, counter = 10; 

    while(true) 
    { 
     count++; 
     if(count == counter) 
     { 
      x--; y--; width++; height++; counter += random.nextInt(50) + 1; 
     } 

       render(x, y, width, height); 
     Display.update(); 
     Display.sync(60); 

     if(Display.isCloseRequested()) 
     { 
      wood.release(); 
      Display.destroy(); 
      System.exit(0); 
     } 
    } 
} 


private void initGL(int width, int height, String title) 
{ 
    try 
     { 
     Display.setDisplayMode(new DisplayMode(width, height)); 
    Display.setTitle(title); 
    Display.create(); 
    } 
    catch(LWJGLException e) 
    { 
    e.printStackTrace(); 
    Display.destroy(); 
    System.exit(1); 
    } 

    GL11.glEnable(GL11.GL_TEXTURE); 
    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GL11.glOrtho(0, width, 0, height, 1, -1); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 

} 


public void loadTexture(String key) 
{ 
    try 
    { 
     wood = TextureLoader.getTexture("PNG", ResourceLoader.getResourceAsStream("./res/images/"+key+".png")); 
    System.out.println("working." + wood.getTextureID()); 
    } 
    catch(FileNotFoundException e) 
    { 
    e.printStackTrace(); 
    Display.destroy(); 
    System.exit(1); 
    } 
    catch(IOException e) 
    { 
    e.printStackTrace(); 
    } 
} 


public void render(int x, int y, int width, int height) 
{ 

    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); 

    System.out.println("working." + wood.getTextureID()); 

      GL11.glBegin(GL11.GL_QUADS); 

       GL11.glBindTexture(GL11.GL_TEXTURE_2D, wood.getTextureID()); 
     GL11.glTexCoord2f(1, 1); 
     GL11.glVertex2f(x, y); 
     GL11.glTexCoord2f(0, 1); 
     GL11.glVertex2f(x + wood.getImageWidth(), y); 
     GL11.glTexCoord2f(0, 0); 
     GL11.glVertex2f(x + wood.getImageWidth(), y + wood.getImageHeight()); 
     GL11.glTexCoord2f(1, 0); 
     GL11.glVertex2f(x, y + wood.getImageHeight()); 

    GL11.glEnd(); 
    System.out.println(wood.getHeight()+ " " +wood.getWidth()); 


} 

    public static void main (String[] args) 
{ 
    new TextureDemo(); 
} 


} 

난 그냥 프로그램에있는 png를 볼 수 있기를 바랍니다. 왜 내가 백인 이미지를 얻는 지 아이디어가 있니? initGL 메소드의 순서가 얼마나 중요합니까?

답변

1

잘 모르겠지만이 오래된 deprecated OpenGL 스타일에서는 glEnable(GL_TEXTURE_2D);으로 생각했습니다. (대신 GL_TEXTURE)

업데이트 : 나는 당신이해야한다고 생각합니다 glEnable(GL_TEXTURE_2D);. 회색의 선명한 색상을 사용해보십시오. 어쩌면 그들은 단지 백인 대신에 검은 색 사각형으로 변했을 것입니다. Slick에는 텍스처를 바인딩하는 함수가 있습니다 (getTextureID가 반환하는 것이 확실하지 않습니다).

업데이트 : 확인 먼저 glBindTexture 다음 glBegin.

+0

입력 해 주셔서 감사합니다.하지만 문제는 더 심각해집니다. 화면은 아무것도하지 않기로 돌아갑니다. 유일한 예외는 GL11.glBindTexture (GL_TEXTURE_2D) 만 변경하면됩니다. 그것이 그것으로 바뀌면 그것은 동일하게 유지됩니다. 하지만 glEnable (GL_TEXTURE_2D)를 수행하면 아무 것도 수행하지 않습니다. – user2727211

+0

업데이트를 확인하십시오. –

+0

회색 색상은 어떻게 만들 수 있습니까? – user2727211

0

텍스쳐 코드가 잘못되었다고 생각합니다. 이것을 다음으로 바꾸어보십시오 :

GL11.glTexCoord2f(0, 0); 
    GL11.glVertex2f(x, y); 
    GL11.glTexCoord2f(1, 0); 
    GL11.glVertex2f(x + wood.getImageWidth(), y); 
    GL11.glTexCoord2f(1, 1); 
    GL11.glVertex2f(x + wood.getImageWidth(), y + wood.getImageHeight()); 
    GL11.glTexCoord2f(0, 1); 
    GL11.glVertex2f(x, y + wood.getImageHeight()); 
관련 문제