以下纯属个人观点
方式
我所知道的选取模型分两种,
- 一种是代码创建的如正方体等,类型的
mesh的; - 一种是外部导入的模型如:obj后缀的,类型为
Group的;
mesh
var mouse = new THREE.Vector2(); //初始化鼠标位置
var raycaster = new THREE.Raycaster(); //模拟涉嫌
window.addEventListener("mousedown",onMouseDown,false); //当鼠标按下是触发
function onMouseDown(event){
event.preventDefault(); //阻止默认事件的触发
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1; //获取鼠标X坐标
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1; //获取鼠标Y坐标
raycaster.setFromCamera(mouse,camera); //用相机和鼠标位置更新射线
var intersects = raycaster.intersectObjects(scene.children); //计算与射线相交的物体
if(intersects.length>0){ //如果大于0,则鼠标选中的提为intersects[0]
console.log(intersects);
}
}
Group
var mouse = new THREE.Vector2();
var raycaster = new THREE.Raycaster();
window.addEventListener("mousedown",onMouseDown,false)
function onMouseDown(event){
event.preventDefault();
mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
raycaster.setFromCamera(mouse,camera);
for(key in scene.children){
console.log(scene.children[key]);
if(scene.children[key].type === 'Group'){
var intersects = raycaster.intersectObjects(scene.children[key].children);
if(intersects.length>0){
console.log(intersects[0]);
}
}
}
}