WebGL z 缓冲区工件?

问题描述 投票:0回答:2

我们正在开发一个基于 Three.js 的 WebGL 项目,但无法理解 WebGL 中如何处理透明度。该图像显示了使用 alpha = 0.7 绘制的双面曲面,其右侧的行为正确。然而,靠近中间会出现奇怪的伪像,而在左侧,透明度似乎根本不起作用。

示例屏幕截图

问题也可以在这里看到: http://emilaxelsson.se/sandbox/vis1/ 以前有人见过类似的东西吗?可能是什么原因?

transparency webgl alpha three.js
2个回答
1
投票

您的问题是透明对象需要按从后到前的顺序排序和渲染(如果您尝试将网格的不透明度从 0.7(透明)更改为 1.0(不透明),您可以看到 z-缓冲区工作得很好)。

参见:

在你的情况下,解决起来可能不那么简单,因为我假设你只有一个网格。

编辑:只是为了总结下面的讨论。可以实现这样的双面透明网格的正确渲染。为此,您需要创建 6 个版本的网格,对应于立方体的 6 个面。每个版本都需要根据“立方体的侧面”(前、后、左、右、上、下)从后到前的顺序排序。 渲染时选择正确的网格(基于相机观察方向)并渲染该单个网格。


0
投票

针对您的情况(基于您所附的图片)的简单解决方案是禁用深度测试并启用面部剔除,而无需进行昂贵的排序和多个网格。如果网格前面没有任何不透明对象,则会产生可接受的结果。

© www.soinside.com 2019 - 2024. All rights reserved.