three.js+WebGL踩坑经验合集(2):3D场景被相机裁切后,被裁切的部分依然可以被鼠标碰撞检测得到(射线检测)

three.js内置了Raycaster类实现鼠标的碰撞检测,用它可以实现3D物体的鼠标点击,移入移出,触屏检测一类的业务功能。

该功能虽然强大,但同事们普遍反映不是那么好用,因为它不像其它配套了可视编辑的3D引擎一样,直接把这些交互事件挂载到3D物体上。

不好用没关系,只要研发团队有懂three.js的人,或者有人把写好的实现代码封装一下给到业务开发去用就可以了。

蛋疼的是,这个东西还有一些小bug,比如它不认相机裁剪。以下为测试用例代码

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>three_cameraNear</title>
  <style>
    body {
      margin: 0;
      overflow: hidden;
    }
  </style>
  <script src="three/build/three.js"></script>
  <script src="three/examples/js/controls/OrbitControls.js"></script>
  <script src="three/examples/js/libs/dat.gui.min.js"></script>
</head>

<body>
  <script>
    var scene = new THREE.Scene();
    
    var geometry = new THREE.SphereGeometry(50, 100, 100);

    var srcColor = 0xFF6600;
    var material = new THREE.MeshLambertMaterial({color: srcColor});
    var mesh = new THREE.Mesh(geometry, material);
    scene.add(mesh);

    var light = new THREE.DirectionalLight({color: 0xFFFFFF, intensity: 0.5});
    light.position.set(-500, 500, 500);
    scene.add(light);

    var ambLight = new THREE.AmbientLight({color: 0xFFFFFF, intensity: 0.3});
    scene.add(ambLight);
    
    var width = window.innerWidth; 
    var height &#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值