THREEJS中通过Raycaster获取鼠标与模型的交互点

注意:group中存放模型

// 适用于通过json得到的sprite精灵绘制的
//点击射线
var raycaster = new THREE.Raycaster();
var mouse = new THREE.Vector2();
// document.getElementById("container").addEventListener('mousedown', onDocumentMouseDown, false);
document.body.addEventListener('mousemove', onDocumentMouseMove, false);
function onDocumentMouseMove(event){
  event.preventDefault();
  mouse.x = (event.clientX / renderer.domElement.clientWidth) * 2 - 1;
  mouse.y = -(event.clientY / renderer.domElement.clientHeight) * 2 + 1;
  raycaster.setFromCamera(mouse, camera);
  var intersects = raycaster.intersectObjects([group], true);

  if (intersects.length > 0) {
    document.body.style.cursor = "pointer";
  }else{
    document.body.style.cursor = "default";
  }
}
document.body.addEventListener('mousedown', onDocumentMouseDown, false);
function onDocumentMouseDown(event) {
  // console.log(event)
  event.preventDefault();
  mouse.x = (event.clientX / renderer.domElement.clientWidth) * 2 - 1;
  mouse.y = -(event.clientY / renderer.domElement.clientHeight) * 2 + 1;

  raycaster.setFromCamera(mouse, camera);

  // 总结一下,这里必须装网格,mesh,装入组是没有效果的
  // 所以我们将所有的盒子的网格放入对象就可以了
  // 需要被监听的对象要存储在clickObjects中。
  // 返回射线选中的对象 第二个参数如果不填 默认是false
  var intersects = raycaster.intersectObjects([group], true);

  if (intersects.length > 0) {
    console.log(intersects)
    console.log([intersects[0].point.x, intersects[0].point.y]);
    var val = {
      lng: intersects[0].point.x,
      lat: intersects[0].point.y
    }
    //可以通过点击获取的坐标轴显示标签等
  }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值