我想修改OutlinePass以概述场景中的所有选定对象,包括屏幕空间中包含在另一对象范围内的对象(我也希望我只是正确地使用了该术语)。 / p>
我使用three.js OutlinePass
来表示场景中当前选中的对象。使用光线拾取,我将附加到选定的对象数组,然后使用所述数组更新outlinePass.selectedObjects
。
我选择的对象是PlaneBufferGeometry
MeshBasicMaterial
。每个下一个绘制的平面都有增加的renderOrder以及稍微更大的z轴偏移(在我的情况下指向上方),这样你就可以正确地选择它们。
OutlinePass
的一个特征,而不是一个bug。当前大纲行为与what it's designed to do相匹配(链接易于理解的步骤列表)。
我在OutlinePass
来源后至少花了1-2个小时,但我不熟悉顶点着色器或深度蒙版的主题,虽然我想在将来了解它们,我现在不能这样做。我相信可以修改OutlinePass
以实现我的需要。
OutlinePass
目前会覆盖scene material以准备edge detection pass。我希望通过修改该行为(因此不同的对象具有不同的材料,因此可以通过边缘检测通过检测)可以通过更改其中一个使用的着色器或深度参数来修改,以区分不同的对象到轮廓(并且不仅仅是它们“包围形状”,可以这么说。)
JS fiddle here,查看JS底部的UNCOMMENT行,看看我描述的问题。一旦取消注释该行,我希望概述这两个平面。
我知道还有其他方法可以显示对象轮廓(比如放大它后面的对象副本),但我对使用OutlinePass
:)感兴趣。谢谢!