我正在尝试检查透明度及其工作原理。
我在其中创建了一个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?
,我怎样才能使立方体可见?答案 0 :(得分:2)
你有没有设置glFrontFace(GL_CW);
的原因?默认值为GL_CCW
,因此您将剔除正面并渲染背面。在球体前方缺失的情况下,你会在里面看到它。
详细说明:
使用法线(src_alpha,1-src_alpha)混合渲染半透明物体时,需要按照深度顺序渲染半透明曲面,然后再回到前面。
如果只渲染一个物体的背面,它可能(如果它或多或少是对称的)看起来是正常的,但它实际上是内向外的,因此不能正确遮挡实际在其中的物体。 / p>
因此,要实现这一点,重要的是不要剔除前表面,并且首先渲染不透明或更远的物体。
如果您希望球体的正面和背面都半透明地渲染,并且正确,则需要在正面之前渲染背面。这可以通过多边形排序来完成,但是对于一个凸起的对象,它可以渲染两次,背面剔除反转 - 所以首先渲染背面,然后渲染前面,两个单独的通道。