【发布时间】:2016-06-23 22:54:52
【问题描述】:
我正在启用 Back-Culling 的 Android 上的 OpenGL ES 2.0 中渲染一个 obj 文件。纹理图像只有一部分(脖子上的项链)实际上有 alpha。
仅渲染网格时,它看起来不错:
但是,启用纹理后,我可以透过网格看到另一侧。您可以在下面看到身体后面的右手也变得可见。有什么想法可能会出错吗?
编辑:
我尝试了以下方法:
- 启用/禁用背面剔除
- 检查顶点的顺序
- 检查法线是否在某些点内部
但似乎没有任何效果。任何其他方向将不胜感激。
编辑 2:
我打开纹理图像,并在图像编辑程序中将其保存为无 Alpha 层,用黑色填充所有透明区域。这就是它现在的样子:
透明度问题消失了,但我无法正常看到项链。
编辑 3:Alpha-blending and the Z-buffer 可以是链接中描述的问题吗?它声称“Z 缓冲区不适用于透明多边形。”
【问题讨论】:
-
这似乎是一个严重的问题。如果您使用的是模拟器,则可能是原因,请在设备上尝试。由于您突然有了透明度,因此深度测试的工作方式会有所不同,因为仍然必须绘制透明对象后面的对象,以便您可以部分看到它。您的混合功能可能有点奇怪并且也导致了这种情况。
-
@MaticOblak 我在设备上。
标签: android opengl-es textures texture-mapping