[英]Enable transparency in 3D - pyopengl
我有一个GLViewWidget,在其中添加了设置这些属性的不同对象(GLMeshItem),以启用透明度:
opt = {
GL_DEPTH_TEST: True,
'glBlendFunc': (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),
}
obj.setGLOptions(opt)
在以下意义上,这几乎可以正常工作:如果我有两个对象obj1和obj2,并按此顺序将它们添加到小部件中,我将在obj1的后面看到obj2,但不是相反。
我试图以不同的顺序添加对象,但是显然我会在obj2后面看到obj1,而不是相反。 我怎样才能使它无差别地对所有对象起作用?
深度测试和透明度不能很好地协同工作。
假设我们绘制您的半透明对象obj1
。 这还将把深度写入深度缓冲区。 现在,假设我们要绘制第二个对象obj2
,它的深度更大。 我们希望可以看到obj2
到obj1
因为obj1
是半透明的。
但是,随着obj2
的深度变大,由于深度测试失败,将不会绘制重叠的像素-因此,我们只会看到obj2
未与obj1
重叠的部分。
深度测试未考虑透明度。 因此,为了使其正常工作,正如BDL在评论中所说,您将必须手动对对象进行排序并以正确的顺序绘制它们。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.