2013-08-16 2 views
0

저는 LWJGL에서 투명 텍스처를 그리려고했습니다. 그러나, 내가 가진 코드가 작동하지 않는 것 같습니다. 코드를 실행할 때마다 투명 이미지가 나타나지만 배경은 완전히 검은 색입니다. 여기 LWJGL에서 투명 텍스처를 그리는 방법은 무엇입니까?

내가 완전히 검은 무엇을 의미하지만 이미지가 괜찮 : 나는 불투명 텍스처를 그릴 수 있었다

enter image description here

하지만 지금까지 나는이 그리기와 운 했어 하나 올바르게.

이 코드에서 누락되었거나 잘못 된 것이 무엇인지 알고 싶습니다. 도면 질감

코드 :

//draw transparent texture  
GL11.glMatrixMode(GL11.GL_TEXTURE); 
GL11.glEnable(GL11.GL_TEXTURE_2D); 
GL11.glEnable(GL11.GL_BLEND); 
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); 
GL11.glPushMatrix();  

GL11.glColor4d(1,1,1,1); 

texture.bind(); 

GL11.glTranslated(0.5,0.5,0.0); 
GL11.glRotated(270-this.getAngle(),0.0,0.0,1.0); 
GL11.glTranslated(-0.5,-0.5,0.0); 

GL11.glBegin(GL11.GL_QUADS); 
{ 
    GL11.glTexCoord2f(0,0); 
    GL11.glVertex2d(this.getX(), this.getY()); 
    GL11.glTexCoord2f(1,0); 
    GL11.glVertex2d(this.getX(),(this.getY()+this.getHeight())); 
    GL11.glTexCoord2f(1,1); 
    GL11.glVertex2d((this.getX()+this.getWidth()),(this.getY()+this.getHeight())); 
    GL11.glTexCoord2f(0,1); 
    GL11.glVertex2d((this.getX()+this.getWidth()), this.getY()); 
} 
GL11.glEnd(); 

GL11.glPopMatrix(); 
GL11.glDisable(GL11.GL_BLEND); 
GL11.glMatrixMode(GL11.GL_MODELVIEW); 

여기 파일에서 텍스처를로드하는 코드입니다 :

private Texture loadTexture(String key){ 
    try { 
     //in this case, key refers to a valid power of 2, transparent png 
     return TextureLoader.getTexture("PNG", new FileInputStream(new File("res/"+key+".png"))); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

     return null; 
} 
+0

당신의 OpenGL에 파일을 업로드 그것에서 텍스처를로드하는 코드를 추가 할 수 있습니까? 이미지에 알파가 포함되어 있습니까? –

+0

그래, 나는 그것이 중요 할지도 모른다고 의심했지만, 나는 또한 그것에 대해 확신하지 못했다. –

+0

'texture.getFormat()'은 무엇을 반환합니까? –

답변

1

은 위의 코드는 문제가있는 것 같지 않습니다.

Up arrow image

확인 당신이 당신의 colorbuffer를 삭제되는 사항 : Slick-Util Library - Part 1 - Loading Images for LWJGL에서 간단한 코드를 사용하여 코드로 render() 방법을 대체함으로써 내가 제대로 위쪽 화살표의 RGBA 이미지를 사용하여 투명성을 볼 수 있었다 문제는 코드의 나머지 부분에서 거짓말을해야하기 때문에이 사건이 작동하지 않는 경우 검은 색 이외의 색, 즉

GL11.glClearColor(0.7f, 0.7f, 0.7f, 1.0f); // try with red (1, 0, 0, 1) green (0, 1, 0, 1) to check the image's transparent area. 

을 사용, 전체 실행 가능한 예제를 게시하시기 바랍니다.

1

당신은이를 추가해야합니다 : 당신의 init 함수에서

glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

:

+0

이 코드가 질문에 답하는 이유에 대한 설명에서 [편집]하십시오. 코드 전용 답변은 솔루션을 가르치지 않기 때문에 [낙담] (http://meta.stackexchange.com/q/148272/274165)입니다. –

+0

OP의 코드를보세요 ... 이미 맨 위에 있습니다. – javac

관련 문제