我在Android上使用Back-Culling在OpenGL ES 2.0中渲染obj文件。只有纹理图像的某些部分(脖子上的项链)实际上有alpha。
当仅渲染网格时,它看起来很好:
然而,在启用纹理时,我能够透过网格看到另一边。你可以在下面看到身体后面的右手也变得可见。什么想法可能会出错?
编辑:
我尝试了以下内容:
但似乎没有任何效果。任何其他方向将不胜感激。
编辑2:
我打开了纹理图像并通过在图像编辑程序中将其保存为无alpha图层来填充所有透明区域的黑色。这就是它现在的样子:
透明度问题已经消失,但我无法正确看到项链。
编辑3:链接中描述的Alpha-blending and the Z-buffer是否可以成为问题?它声称'Z缓冲区不适用于透明多边形。'
答案 0 :(得分:1)
深度缓冲和alpha混合的冲突有很多解决方案。
在您的情况下,最好只是禁用混合并丢弃片段着色器中的像素。
您可能在附件的边框上只有一些半透明像素,其余部分为1.0
或0.0
。因此,如果alpha < 0.5
丢弃其他设置为1.0
,则可能会传递。
另一种方法是确保最后绘制这些混合对象。如果你在场景中只有一个这样的对象它应该工作。但如果你有多个一个在另一个后面,你可能会再次遇到问题。