所以我试图用alpha混合覆盖xtk中的2个网格,设置不同的颜色和不透明度。XTK在覆盖网格中闪烁
的例子可以在这里 http://biostat.jhsph.edu/~jmuschel/XTK_Flicker_Example/
看出,当2项目都在同一渲染渲染,但不重叠,这不会发生。
我似乎无法理解为什么会发生这种闪烁。
所以我试图用alpha混合覆盖xtk中的2个网格,设置不同的颜色和不透明度。XTK在覆盖网格中闪烁
的例子可以在这里 http://biostat.jhsph.edu/~jmuschel/XTK_Flicker_Example/
看出,当2项目都在同一渲染渲染,但不重叠,这不会发生。
我似乎无法理解为什么会发生这种闪烁。
这就是排序算法与你搞砸。渲染透明对象像three.js或xtk这样的图形引擎就像从后到前对场景中的对象进行排序,这样透明度就可以正确地累积(在'Learning WebGL'中可以更多地了解它)。
由于您的场景在另一个大的透明对象内部有一个大的透明对象,它们具有相同的原点,使得排序机制变得混乱并开始在前后翻转对象。当首先渲染内部对象时,外部会将其透明度与内部对象融合,但当首先渲染外部对象时,内部对象将因其表面位于外部(深度测试)之后而被忽略。
要解决这个问题,您可以尝试强制内部对象先呈现。
您可以通过执行
r0 = new X.renderer3D();
r0.init();
r0.config.ORDERING_ENABLED = false
这样在添加对象到现场将决定它们所呈现的顺序,停用该渲染器重新排序(which is also the solution to this problem in three.js)。它解决了闪烁问题。