如何使用Raycaster Three.js获取组对象的名称

如何使用Raycaster Three.js获取组对象的名称,three.js,groupname,Three.js,Groupname,我想用raycaster得到这个组的名字,但是我取了这个名字,这个名字是空的,我的代码是这样的 我需要做的是,当鼠标在组网格上时,我需要提醒我goup的名称或一些我知道我击中了特定网格的东西 `//+++++++++++++++++++++++++光线投射器+++++++++++++++++++++ // creating group and add all the pieses group = new THREE.Object3D(); //create an empty container

我想用raycaster得到这个组的名字,但是我取了这个名字,这个名字是空的,我的代码是这样的

我需要做的是,当鼠标在组网格上时,我需要提醒我goup的名称或一些我知道我击中了特定网格的东西

`//+++++++++++++++++++++++++光线投射器+++++++++++++++++++++

// creating group and add all the pieses
group = new THREE.Object3D(); //create an empty container
group.add(obj_body); //add a mesh with geometry to it
group.name = 'myGroupName';
scene.add(group);

ray_objects.push(group);


var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();

window.addEventListener( 'mousemove', onMouseMove, false );
window.addEventListener( 'onDocumentMouseDown', onMouseMove, false );


function onMouseMove( event ) {

// calculate mouse position in normalized device coordinates
// (-1 to +1) for both components

mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;

// console.log(mouse.x);
$("#x_pos").html(mouse.x);
$("#y_pos").html(mouse.y);


// update the picking ray with the camera and mouse position
raycaster.setFromCamera( mouse, camera );

// calculate objects intersecting the picking ray
var intersects = raycaster.intersectObjects( ray_objects, true );

for ( var i = 0; i < intersects.length; i++ ) {



if (intersects.length > 0) {
    var firstIntersectedObject  = intersects[0];

    // alert(firstIntersectedObject);
    console.log(firstIntersectedObject);
    intersects[ 0 ].object.material.color.set( 0x00ff00  );
    // this will give you the first intersected Object if there aremultiple.

    renderer.render( selected_scene, camera );
}

// alert(intersects);
}}` 
//创建组并添加所有饼
group=new THREE.Object3D()//创建一个空容器
添加组(obj_体)//添加带有几何体的网格
group.name='myGroupName';
场景。添加(组);
ray_objects.push(组);
var raycaster=new THREE.raycaster();
var mouse=new THREE.Vector2();
addEventListener('mousemove',onMouseMove,false);
addEventListener('onDocumentMouseDown',onMouseMove,false);
mouseMove函数(事件){
//在标准化设备坐标中计算鼠标位置
//两个组件的-1到+1
mouse.x=(event.clientX/window.innerWidth)*2-1;
mouse.y=-(event.clientY/window.innerHeight)*2+1;
//console.log(mouse.x);
$(“#x_pos”).html(mouse.x);
$(“#y_pos”).html(mouse.y);
//使用相机和鼠标位置更新拾取光线
raycaster.setFromCamera(鼠标、相机);
//计算与拾取光线相交的对象
var intersects=raycaster.intersectObjects(光线对象,真);
对于(变量i=0;i0){
var firstIntersectedObject=相交[0];
//警报(firstIntersectedObject);
console.log(firstIntersectedObject);
相交[0]。对象。材质。颜色。集合(0x00ff00);
//这将为您提供第一个相交对象(如果有多个)。
渲染器。渲染(选定的场景、摄影机);
}
//警报(交叉);
}}` 

我认为WestLangley在其链接评论中的解释相当不错,但如果您需要一些基本想法的帮助,这里有一个例子。我创建了4个立方体,每组2个,并将它们添加到组中。当您将鼠标移到多维数据集上时,它们会将其组记录到控制台

var-width=window.innerWidth;
var height=window.innerHeight;
var renderer=new THREE.WebGLRenderer();
设置大小(宽度、高度);
document.body.appendChild(renderer.doElement);
var scene=new THREE.scene();
var group1=new THREE.Object3D();
var立方计量法=新的三个立方计量法(50,50,50);
var cube1=新的三网格(立方计量法);
立方1.位置.设置(0,50,50);
var cube2=新的三网格(立方计量法);
立方体2。位置。设置(0,150,50);
cube1.userData.parent=group1;
cube2.userData.parent=group1;
第1组:添加(cube1);
第1组:添加(立方体2);
group1.name=“Group 1”;
var group2=new THREE.Object3D();
var cube3=新的三网格(立方计量法);
立方位置设置(300、50、50);
var cube4=新的三网格(立方计量法);
立方体4.位置.组(300、150、50);
cube3.userData.parent=group2;
cube4.userData.parent=group2;
第2组:添加(立方体3);
第2组:添加(立方体4);
group2.name=“组2”;
场景。添加(第1组);
场景。添加(第2组);
var摄像机=新的三视角摄像机(60,宽/高,11000);
摄像机位置z=500;
render();
制作动画();
函数animate(){
请求动画帧(动画);
}
函数render(){
渲染器。渲染(场景、摄影机);
}
var raycaster=new THREE.raycaster();
var mouse=new THREE.Vector2();
mouseMove函数(事件){
//在标准化设备坐标中计算鼠标位置
//两个组件的-1到+1
mouse.x=(event.clientX/window.innerWidth)*2-1;
mouse.y=-(event.clientY/window.innerHeight)*2+1;
//使用相机和鼠标位置更新拾取光线
raycaster.setFromCamera(鼠标、相机);
//计算与拾取光线相交的对象
var intersects=raycaster.intersectObjects(scene.children,true);
if(相交和相交[0]){
console.log('组为'+intersects[0].object.userData.parent.name)
}
}
document.addEventListener('mousemove',onMouseMove)

我认为WestLangley在其链接评论中的解释相当不错,但如果您需要一些基本想法的帮助,这里有一个示例。我创建了4个立方体,每组2个,并将它们添加到组中。当您将鼠标移到多维数据集上时,它们会将其组记录到控制台

var-width=window.innerWidth;
var height=window.innerHeight;
var renderer=new THREE.WebGLRenderer();
设置大小(宽度、高度);
document.body.appendChild(renderer.doElement);
var scene=new THREE.scene();
var group1=new THREE.Object3D();
var立方计量法=新的三个立方计量法(50,50,50);
var cube1=新的三网格(立方计量法);
立方1.位置.设置(0,50,50);
var cube2=新的三网格(立方计量法);
立方体2。位置。设置(0,150,50);
cube1.userData.parent=group1;
cube2.userData.parent=group1;
第1组:添加(cube1);
第1组:添加(立方体2);
group1.name=“Group 1”;
var group2=new THREE.Object3D();
var cube3=新的三网格(立方计量法);
立方位置设置(300、50、50);
var cube4=新的三网格(立方计量法);
立方体4.位置.组(300、150、50);
cube3.userData.parent=group2;
cube4.userData.parent=group2;
第2组:添加(立方体3);
第2组:添加(立方体4);
group2.name=“组2”;
场景。添加(第1组);
场景。添加(第2组);
var摄像机=新的三视角摄像机(60,宽/高,11000);
摄像机位置z=500;
render();
制作动画();
函数animate(){
请求动画帧(动画);
}
函数render(){
渲染器。渲染(场景、摄影机);
}
var raycaster=new THREE.raycaster();
var mouse=new THREE.Vector2();
mouseMove函数(事件){
//在标准化设备坐标中计算鼠标位置
//两个组件的-1到+1
mouse.x=(event.clientX/window.innerWidth)*2-1;
mouse.y=-(event.clientY/window.innerHeight)*2+1;
//使用相机和鼠标位置更新拾取光线
raycaster.setFromCamera(鼠标、相机);
//计算与拾取光线相交的对象