2014-12-19 5 views
-1

간섭 나는 알파 블렌딩이 활성화하면서 슬릭 사용하여 텍스처를 가져 오는 경우 내가 LWJGL 및슬릭 텍스처 로더와 glBlendFunc이

슬릭에 관한 문제가, 디스플레이 렌더링 중지됩니다!

다음은 코드입니다. 시작시 보라색 사각형이 렌더링됩니다. 버튼 T를 누르면 텍스처를 가져옵니다. 비록 실제로 텍스처를 묶어 본 적이 없지만 화면은 여전히 ​​검은 색으로 변합니다!

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

import java.io.IOException; 

import org.lwjgl.input.Keyboard; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 
import org.lwjgl.opengl.GL11; 
import org.newdawn.slick.opengl.Texture; 
import org.newdawn.slick.opengl.TextureLoader; 
import org.newdawn.slick.util.ResourceLoader; 

public class Game { 

public static void main(String[] args) throws Exception { 
    Display.setDisplayMode(new DisplayMode(800, 600)); 
    Display.create(); 
    Game game = new Game(); 
    while (!Display.isCloseRequested()) { 
     game.update(); 
    } 
    game.close(); 
} 

public Game() { 
    initGL(); 

} 

Texture boxTexture; 

public void update() { 
    clearGL(); 

    // Use the texture! 
    GL11.glColor3f(0.4f, 0.2f, 0.9f); 
    GL11.glBegin(GL11.GL_QUADS); 

    GL11.glVertex2f(100, 100); 

    GL11.glVertex2f(140, 100); 

    GL11.glVertex2f(140, 140); 

    GL11.glVertex2f(100, 140); 
    GL11.glEnd(); 

    if(Keyboard.isKeyDown(Keyboard.KEY_T)) 
    { 
     try { 
      boxTexture = TextureLoader.getTexture("png", 
        ResourceLoader.getResourceAsStream("res/ps.png")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    Display.update(); 
} 

public void close() { 
    Display.destroy(); 
    System.exit(0); 
} 

public void initGL() { 
    // Enable Alpha Blending 
    GL11.glEnable(GL_BLEND); 
    GL11.glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA); 

    // Opengl init 
    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GL11.glOrtho(0, 500, 0, 500, 1, -1); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 

    // Enable textures 
    GL11.glEnable(GL11.GL_TEXTURE_2D); 
} 

public void clearGL() { 
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT); 
    GL11.glLoadIdentity(); 
} 
} 
+0

텍스처를 절대로 바인드하지 않으면, 정의되지 않은 결과를 생성하는'GL_TEXTURE_2D'를 활성화해서는 안됩니다. '(0.0, 0.0, 0.0, 1.0) '이라는 색이 모든 것에 할당 되었기 때문에 검은 화면이 나타나는 것 같습니다. –

답변

0

TextureLoader.getTexture()는 질감을 결합 :

여기 내 코드입니다. 당신은 슬릭 source code 보면, 당신은 InternalTextureLoader 클래스의 getTexture() 방법에 다음 줄을 발견 할 것이다 :

GL.glBindTexture(target, textureID); 
그것은 거의가를로드 glTexImage2D() 같은 함수를 호출 할 필요가 있기 때문에, 질감을 결합하는

조직. 이제 텍스처가 바인딩이 있기 때문에

그래서 실제로,이 함수를 호출 한 후 텍스쳐를 사용합니다, 당신은 자신의 코드에 텍스처링을 활성화 :

GL11.glEnable(GL11.GL_TEXTURE_2D); 

는 텍스처 이미지를 확인하려면, 당신은해야합니다 텍스처 좌표 지정과 같은 추가 단계를 수행하십시오.