三.js - 我们可以使用光线投射器与模型的材料 ID 相交吗?



我一直试图使用它们的 ID 在加载模型的 3 种材料中只相交一种材料,但是,控件继续到整个模型。让我知道是否可以根据材料 ID 进行间隔

var intersects = raycaster.intersectObjects( scene.children );
for ( var i = 0; i < intersects.length; i++ ) {
object.scene.traverse(function(child) {
if ( child instanceof THREE.Mesh ) {
if (child.material.name == "heap")  {
child.material.color = new THREE.Color( 0x00ff00 );
}
}
})
}

您可以通过访问交集结果object上的material属性来更新光线投射对象的材质。 要记住的是,当您更新材质对象的属性时,您需要设置needsUpdate = true以便 threejs 知道材质需要在内部更新。

请考虑以下代码来实现您所期望的目标:

// If only interested in one intersection, you can use .intersectObject()
var intersection = raycaster.intersectObject( scene.children );
// If intersection found, update material in some way
if(intersection) {
// Extract object and material from intersection
var object = intersection.object;
var material = object.material;
/*
Manipulate your material as you need to
material.color = new THREE.Color( 1, 0, 0 );  
*/
// Tell threejs that the material was changed and
// needs to be updated internally
material.needsUpdate = true; 
}

最新更新