启用 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
,它具有更大的深度。我们希望我们会看到 obj2
到 obj1
,因为 obj1
是半透明的。
然而,由于 obj2
的深度更大,重叠像素不会被绘制,因为深度测试失败 - 所以我们只会看到 obj2
没有被 [=10 重叠的部分=].
深度测试不考虑透明度。因此,为了使其正常工作,正如 BDL 在评论中所说,您将必须手动对对象进行排序并以正确的顺序绘制它们。
我有一个 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
,它具有更大的深度。我们希望我们会看到 obj2
到 obj1
,因为 obj1
是半透明的。
然而,由于 obj2
的深度更大,重叠像素不会被绘制,因为深度测试失败 - 所以我们只会看到 obj2
没有被 [=10 重叠的部分=].
深度测试不考虑透明度。因此,为了使其正常工作,正如 BDL 在评论中所说,您将必须手动对对象进行排序并以正确的顺序绘制它们。