所以我尝试用 alpha 混合覆盖 xtk 中的 2 个网格,设置不同的颜色和不透明度。
可以在这里看到一个例子 http://biostat.jhsph.edu/~jmuschel/XTK_Flicker_Example/
当 2 个网格都在同一个渲染器中渲染但不重叠时,不会发生这种情况。
我似乎无法理解为什么会在闪烁时发生这种情况。
所以我尝试用 alpha 混合覆盖 xtk 中的 2 个网格,设置不同的颜色和不透明度。
可以在这里看到一个例子 http://biostat.jhsph.edu/~jmuschel/XTK_Flicker_Example/
当 2 个网格都在同一个渲染器中渲染但不重叠时,不会发生这种情况。
我似乎无法理解为什么会在闪烁时发生这种情况。
那是排序算法与你搞砸了。在渲染透明对象时,像 three.js 或 xtk 这样的图形引擎喜欢从后到前对场景中的对象进行排序,以便正确累积透明度(在“学习 WebGL”中了解更多信息)。
由于您的场景在另一个大透明对象内有一个大透明对象,并且两者具有相同的来源,因此排序机制会混淆并开始在前后翻转对象。当首先渲染内部对象时,外部对象会将其透明度与内部对象混合,但是当首先渲染外部对象时,内部对象将被忽略,因为它的表面位于外部对象的后面(深度测试)。
为了解决这个问题,您可以尝试强制首先渲染内部对象。
您可以通过执行禁用渲染器重新排序(这也是three.js中此问题的解决方案)
r0 = new X.renderer3D();
r0.init();
r0.config.ORDERING_ENABLED = false
这样,您将对象添加到场景中的顺序将决定它们的渲染顺序。它解决了我闪烁的问题。