OpenGL:尽管透明度设置为1.0,但能够看到对象内部

时间:2012-12-23 13:51:18

标签: opengl transparency

我正在尝试检查透明度及其工作原理。

我在其中创建了一个solidphere和一个solidcube。 我启用了

glEnable(GL_BLEND);  
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

透明度使用color4f按预期工作 问题是当我将球体的透明度设置为1.0时,立方体仍会出现。

我也在使用这些:

glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL); 
glClearDepth(1); 
glPolygonMode(GL_FRONT_AND_BACK,GL_FILL);
glEnable(GL_CULL_FACE);  
glFrontFace(GL_CW);

如果球体的透明度为!= 1.0?

,我怎样才能使立方体可见?

1 个答案:

答案 0 :(得分:2)

你有没有设置glFrontFace(GL_CW);的原因?默认值为GL_CCW,因此您将剔除正面并渲染背面。在球体前方缺失的情况下,你会在里面看到它。

详细说明:

使用法线(src_alpha,1-src_alpha)混合渲染半透明物体时,需要按照深度顺序渲染半透明曲面,然后再回到前面。

如果只渲染一个物体的背面,它可能(如果它或多或少是对称的)看起来是正常的,但它实际上是内向外的,因此不能正确遮挡实际在其中的物体。 / p>

因此,要实现这一点,重要的是不要剔除前表面,并且首先渲染不透明或更远的物体。

如果您希望球体的正面和背面都半透明地渲染,并且正确,则需要在正面之前渲染背面。这可以通过多边形排序来完成,但是对于一个凸起的对象,它可以渲染两次,背面剔除反转 - 所以首先渲染背面,然后渲染前面,两个单独的通道。