所以我在three.js中有一个raycaster,它允许我检测我的组被翻过来的时间。它目前的工作原理是,当我将鼠标移到该组的任何一个孩子上时,整个组的材料都会发生变化。 这是我的问题:如何检测哪个特定的孩子被翻过来并只突出显示那个特定的孩子?
以下是代码:
var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
var intersects = raycaster.intersectObjects(tiles_group.children, true);
if ( intersects.length > 0 ) {
intersectedObject = intersects[0].object;
intersectedObject.material.emissive.setHex( 0xffffff );
intersected = true;
} else {
intersected = false;}
这应该很容易,但经过几个小时的搜索和尝试,我似乎无法找到正确的逻辑/语法。提前感谢阅读/回复此帖子的任何人!
答案 0 :(得分:1)
简短的回答:为每个对象创建一个材质而不是为所有对象创建一个材质
解释:正如WestLangley指出的那样,我只需要为每个子对象创建一个单独的材质,而不是让它们共享相同的材质,即将材质创建INSIDE用于生成对象的循环,以便每个对象都得到它自己的材料。这样,每个对象都会单独更改材料。