GL_BLEND没有绘制JAVA

时间:2014-03-03 17:08:35

标签: 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+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();

矩形不会绘制。

1 个答案:

答案 0 :(得分: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命令排序应该是相同的。