【问题标题】:GL_BLEND not drawing JAVAGL_BLEND 不绘制 JAVA
【发布时间】:2014-03-03 17:08:34
【问题描述】:

我目前正在制作一种在 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.5?
  • 你没有事先处理过 glAlphaFunc 吗?

标签: java opengl blend


【解决方案1】:

如果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 命令顺序应该是相同的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2013-05-05
    • 2010-10-04
    • 2012-05-26
    • 2014-01-22
    • 1970-01-01
    相关资源
    最近更新 更多