GL_混合不绘制JAVA

GL_混合不绘制JAVA,java,opengl,blend,Java,Opengl,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+x

我目前正在用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以实现透明性时

    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();

矩形不会绘制。

如果
alpha
0.0
,您的四边形将完全透明。将其设置为类似于
0.5

正如cfrick指出的,确保通过
glDisable(GL\u alpha\u 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;
}
#包括
布尔混合=假;
无效键盘(无符号字符键,整数x,整数y)
{
如果(键=='b')
{
混合=!混合;
再发现();
}
}
无效显示()
{
glClear(GLU颜色缓冲位);
glMatrixMode(GL_投影);
glLoadIdentity();
格洛托(-2,2,-2,2,-1,1);
glMatrixMode(GLU模型视图);
glLoadIdentity();
glDisable(GLU混合);
如果(混合)
{
glEnable(GL_混合物);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去GL_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);
格伦德();
glutSwapBuffers();
}
int main(int argc,字符**argv)
{
GLUTINITWindowsSize(640480);
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
GLUT(GLUT);
键盘Func(键盘);
glutDisplayFunc(显示器);
glutMainLoop();
返回0;
}

对不起,C++,我不是一个java的家伙。不过,GL命令顺序应该是相同的。

alpha的值是多少<代码>0.5?您事先没有用glAlphaFunc进行修补吗?