所以我有一个GLB格式的模型(来自CAD的组件(,有很多零件、层次结构等等。我试图实现的是在mouseover上突出显示一个对象(特别是程序集的一部分(。
所以实现这一点的主要代码是:
raycaster.setFromCamera( pointer, camera );
const intersects = raycaster.intersectObjects(scene.children, true);
if ( intersects.length > 0 ) {
if ( INTERSECTED != intersects[ 0 ].object ) {
if ( INTERSECTED ) INTERSECTED.material.color.set( INTERSECTED.currentColor );
INTERSECTED = intersects[ 0 ].object;
INTERSECTED.currentColor = INTERSECTED.material.color.getHex();
INTERSECTED.material = INTERSECTED.material.clone();
INTERSECTED.material.color.setHex( 0xffb300 );
}
} else {
if ( INTERSECTED ) INTERSECTED.material.color.set( INTERSECTED.currentColor );
INTERSECTED = null;
}
但不幸的是,我得到的结果是,只有一张脸的颜色发生了变化,而网格的其他部分则没有。我试过很多东西,但我对three.js有点新手,所以基本上我对一无所知
对于未来有同样问题的任何人:出于某种原因,步骤->glb转换为每个对象面生成一个独立的网格。因此,为了突出整个部分,我不得不更改object.parent.children 中每个对象的材质