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

OpenGL:尽管透明度设置为1.0,但仍能看到对象的内部,opengl,transparency,Opengl,Transparency,我试图检查透明度及其工作原理 我在其中创建了一个solidsphere和一个solidcube。 我启用了 glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 使用color4f时,透明效果与预期一致。 问题是,当我将球体的透明度设置为1.0时,立方体仍然会出现 我也在使用这些: glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glClearDept

我试图检查透明度及其工作原理

我在其中创建了一个solidsphere和一个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?

设置glFrontFace(GL_CW)是否有原因?默认值为
GL\u CCW
,因此您将剔除正面,并渲染背面。由于球体的前部缺失,您将看到其内部

详细说明:

使用法线(src_alpha,1-src_alpha)混合渲染半透明对象时,需要按深度顺序从后向前渲染半透明曲面

如果仅渲染对象的后表面,它可能(如果它或多或少对称)看起来正常,但实际上是由内而外的,因此无法正确遮挡实际位于其内部的对象

因此,要使其起作用,重要的是不剔除前表面,并且首先渲染不透明或较远的对象


如果希望球体的正面和背面都以半透明方式正确渲染,则需要先渲染背面,再渲染正面。这可以通过多边形排序来完成,但对于凸面对象,只要渲染两次就足够了,背面消隐是反向的-因此,在两个单独的过程中,首先渲染背面,然后渲染正面。

我添加了一些其他测试。刚刚删除了它,但是当球体的alpha值设置为0.5时,我仍然看不到其中的立方体。你是先渲染立方体吗?如果你的意思是如果它在代码中是第一个,那么是的。(很抱歉延迟回复)