three.js如何破解OutlinePass概述所有选定的对象?

时间:2018-03-13 15:00:39

标签: javascript 3d three.js outline

我想修改OutlinePass以概述场景中的所有选定对象,包括屏幕空间中包含在另一对象范围内的对象(我也希望我只是正确地使用了该术语)。 / p>

我使用three.js OutlinePass来表示场景中当前选中的对象。使用光线拾取,我将附加到选定的对象数组,然后使用所述数组更新outlinePass.selectedObjects

我选择的对象是PlaneBufferGeometry MeshBasicMaterial。每个下一个绘制的平面都有增加的renderOrder以及稍微更大的z轴偏移(在我的情况下指向上方),这样你就可以正确地选择它们。

  1. 如果我选择两个不相交的平面,则轮廓可以正常工作。
  2. 如果我选择两个相交的平面,轮廓可以正常工作 - 它只绘制两个相交的形状 - 这个效果实际上很好,但无论如何都会碰到修复下一个点。
  3. 如果我选择两个平面,其中一个包含在另一个平面内(包含在视图中,从相机所在的位置看),则只显示外部形状。是的,这可能是OutlinePass的一个特征,而不是一个bug。
  4. 当前大纲行为与what it's designed to do相匹配(链接易于理解的步骤列表)。

    我在OutlinePass来源后至少花了1-2个小时,但我不熟悉顶点着色器或深度蒙版的主题,虽然我想在将来了解它们,我现在不能这样做。我相信可以修改OutlinePass以实现我的需要。

    OutlinePass目前会覆盖scene material以准备edge detection pass。我希望通过修改该行为(因此不同的对象具有不同的材料,因此可以通过边缘检测通过检测)可以通过更改其中一个使用的着色器或深度参数来修改,以区分不同的对象到轮廓(并且不仅仅是它们“包围形状”,可以这么说。)

    JS fiddle here,查看JS底部的UNCOMMENT行,看看我描述的问题。一旦取消注释该行,我希望概述这两个平面。

    我知道还有其他方法可以显示对象轮廓(比如放大它后面的对象副本),但我对使用OutlinePass :)感兴趣。谢谢!

0 个答案:

没有答案