如何在 threejs 中只对网格的某些边着色

How to Only Color Certain Edges of Mesh in threejs

我只是在学习 threejs,我在 3D 建模方面几乎没有任何经验,所以如果我有任何愚蠢之处,我深表歉意。

我有这个复杂的形状,一个从 .obj 文件导入的 3D 字母 J,我想用某种颜色突出显示边缘。为此,我使用了以下代码:

const colorEdges=()=>{
    let geometry = new THREE.EdgesGeometry( letterJ.geometry ); 
    let material = new THREE.LineBasicMaterial( { color: 0xffff00, linewidth: 2 } );
    let edges = new THREE.LineSegments( geometry, material );
    letterJ.add( edges ); 
}

结果是:

但是,有些边缘我不想着色,比如 J 曲线上的边缘。我想要它,以便只有真正的 edges字母都有轮廓,不是每个面孔的交集。我尝试在搅拌机中将一些面孔合并在一起并成功,但不可能完全平滑曲线。

那么,有没有办法使用 threejs 有选择地为这些边缘中的一些着色?在 geometry 中有一个点数组,但改变它有时只会删除边缘,虽然我可能会弄乱它几个小时,但我宁愿找到一个更有效的解决方案。如果最好的解决方案是在 Blender 中更改它,那么我也可以这样做,这就是我想我最终会做的,但如果在 threejs 中有更好的方法,那就更好了。 谢谢!

EdgesGeometry 接受第二个参数。它是添加边所需的 2 个面之间的度数差。它默认为 1 度。将其设置为 30 度(或其他角度),以便曲线中的边缘失效但其他任何地方的边缘都成功。