繁体   English   中英

在3D中启用透明度-pyopengl

[英]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 ,它的深度更大。 我们希望可以看到obj2obj1因为obj1是半透明的。

但是,随着obj2的深度变大,由于深度测试失败,将不会绘制重叠的像素-因此,我们只会看到obj2未与obj1重叠的部分。

深度测试未考虑透明度。 因此,为了使其正常工作,正如BDL在评论中所说,您将必须手动对对象进行排序并以正确的顺序绘制它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM