我有一个OpenGL应用程序,它显示一个透明的管道和一些穿过它的彩色液体。
图片显示左侧管道为空,右侧为满管。
当我将背景更改为白色时,透明管道消失(我猜它也会变成白色,因为混合)。
我使用以下GL代码:
gl.glColor4d( 240, 240, 240, 0.1); // transparent color
gl.glEnable( gl.GL_BLEND );
gl.glBlendFunc( gl.GL_SRC_ALPHA, gl.GL_ONE );
glu.gluCylinder( quadObj, width, width, length, 32, 1 );
如何调整混合功能(和/或颜色,如果需要)以达到与白色背景相同的效果?
答案 0 :(得分:3)
我建议glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
顺便说一句。进入glColor…{f,d}
的值被剪切到范围[0,1]。我建议你为外管尝试一些浅灰色,即glColor4f(0.75, 0.75, 0.75, 0.1)
另请注意,OpenGL透明度与订单无关。面部必须从前面排序以便混合才能正常工作(如果您看到图片中圆柱体的远端,您可以看到,它会错过背面,这可能是因为它最后被绘制,但之后已被气缸的其余部分遮挡。
更新:透明度顺序问题有一个简单的解决方法:在启用了面部剔除的情况下绘制两次圆柱体。在第一步绘制正面被剔除,然后第二次绘制背面被剔除:
glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
gluCylinder( quadObj, width, width, length, 32, 1 );
glCullFace(GL_BACK);
gluCylinder( quadObj, width, width, length, 32, 1 );
glDisable(GL_CULL_FACE);