2013-08-16 5 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

Приведенный выше код не кажется, есть проблема. С помощью простого кода из Slick-Util Library - Part 1 - Loading Images for LWJGL и замены методы render() с вашим кодом, я был в состоянии правильно видеть прозрачность использования этого RGBA образа стрелка вверх:

Up arrow image

Пожалуйста, убедитесь, что вы очистив colorbuffer в цвет, кроме черного т.е. использовать

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

вам просто нужно добавить следующее:

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

в функции инициализации :)

+0

Не могли бы вы [редактировать] объяснить, почему этот код отвечает на вопрос? Кодовые ответы [обескуражены] (http://meta.stackexchange.com/q/148272/274165), потому что они не учат решению. –

+0

Посмотрите на код OP ... он уже есть, сверху. – javac

Смежные вопросы