2

我在 webgl 上下文中有两个透明的重叠球体。在重叠期间,我想控制球体的绘制方式。您可以在此页面上看到我的问题:

http://andrewray.me/stuff/circle-clip.html

当红色和蓝色球体重叠时,我希望蓝色球体隐藏在红色球体后面。

如果我只是更改将球体添加到场景中的顺序(如果我先添加大球体),我会得到所需的行为http ://andrewray.me/stuff/circle-clip-correct.html

但是,在我的项目中情况有所不同。即使我先添加了大球体,我也看到了交叉点。

我得到的最接近的是将较小的球体移近相机。在这个例子中,我将较小的球体移近了 10 个单位:http : //andrewray.me/stuff/b-test/

但是,如果你用方向键四处走动,你会看到交叉路口时不时地闪烁,有时会粗鲁地保持可见(尤其是从侧面冒出的气泡)

我已经尝试depwthWrite: false在这两种材料上进行设置,但这没有任何效果。

我有点搞砸了,renderer.sortObjects = false但我认为这消除了我希望与场景的其余部分一起出现的“自然”绘制顺序。正是这些领域我有问题。

  1. 我可以在 webgl/three.js 中强制透明对象的绘制顺序吗?即使将较小的球体移近 10 个单位,它们也似乎在进行 z-fighting
  2. 或者有什么方法可以强制重叠透明对象的行为?
4

1 回答 1

9

经过多次头部撞击(不是好的那种),我发现您可以在网格上使用标志来强制绘制顺序。

三台r70及以上使用renderOrder

mesh.renderOrder = 0.5; // Value from 0 to 1

三个r69 及以下使用renderDepth

mesh.renderDepth = 0.5; // Value from 0 to 1

它首先绘制最低,最后绘制最高。

于 2013-07-15T07:09:44.747 回答