启用 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,而不是相反的。

我尝试以不同的顺序添加对象,但显然我会看到 obj1 在 obj2 后面,而不是相反。我怎样才能使它无差别地适用于所有对象?

深度测试和透明度不能很好地结合在一起。

假设我们绘制你的半透明物体obj1。这也会将它的深度写入深度缓冲区。 现在假设我们要绘制第二个对象 obj2,它具有更大的深度。我们希望我们会看到 obj2obj1,因为 obj1 是半透明的。

然而,由于 obj2 的深度更大,重叠像素不会被绘制,因为深度测试失败 - 所以我们只会看到 obj2 没有被 [=10 重叠的部分=].

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