2014-03-03 80 views
0

我目前正在製作一個方法來在我的Java遊戲中繪製一個簡單的矩形。它正常工作時,我只需使用此代碼:GL_BLEND沒有繪製JAVA

glPushMatrix();  

    glColor4f(red,green,blue,alpha); 

    glBegin(GL_QUADS); 
    { 
     glVertex2f(x, y); 
     glVertex2f(x, y+y1); 
     glVertex2f(x+x1, y+y1); 
     glVertex2f(x+x1, y); 
    } 
    glEnd(); 

    glPopMatrix(); 

但是,當我嘗試啓用GL_BLEND爲transperency,

glPushMatrix(); 

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

    glColor4f(red,green,blue,alpha); 

    glBegin(GL_QUADS); 
    { 
     glVertex2f(x, y); 
     glVertex2f(x, y+y1); 
     glVertex2f(x+x1, y+y1); 
     glVertex2f(x+x1, y); 
    } 
    glEnd(); 

    glDisable(GL_BLEND); 

    glPopMatrix(); 

矩形不畫。

+1

'alpha'的價值是什麼? '0.5'? – genpfault

+0

事先你沒有使用glAlphaFunc進行修復? – cfrick

回答

0

如果alpha0.0您的四合一將完全透明。將其設置爲類似0.5

而且正如cfrick指出的,確保您通過glDisable(GL_ALPHA_TEST)禁用alpha測試。

例子:

#include <GL/glut.h> 

bool blend = false; 
void keyboard(unsigned char key, int x, int y) 
{ 
    if(key == 'b') 
    { 
     blend = !blend; 
     glutPostRedisplay(); 
    } 
} 

void display() 
{ 
    glClear(GL_COLOR_BUFFER_BIT); 

    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    glOrtho(-2, 2, -2, 2, -1, 1); 

    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 

    glDisable(GL_BLEND); 
    if(blend) 
    { 
     glEnable(GL_BLEND); 
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    } 

    glColor4f(1.0f, 0.0f, 0.0f, 0.5f); 
    glBegin(GL_QUADS); 
    glVertex2i(-1, -1); 
    glVertex2i( 1, -1); 
    glVertex2i( 1, 1); 
    glVertex2i(-1, 1); 
    glEnd(); 

    glutSwapBuffers(); 
} 

int main(int argc, char **argv) 
{ 
    glutInitWindowSize(640, 480); 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE); 
    glutCreateWindow("GLUT"); 
    glutKeyboardFunc(keyboard); 
    glutDisplayFunc(display); 
    glutMainLoop(); 
    return 0; 
} 

對不起,C++,我沒有太大的一個Java的傢伙。 GL命令排序應該是相同的。