我目前正在制作一种方法,用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();
矩形不会绘制。
答案 0 :(得分:0)
如果alpha
为0.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命令排序应该是相同的。