GL_混合不绘制JAVA
我目前正在用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
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进行修补吗?