当前位置:   article > 正文

关于Three.js THREE.Raycaster射线拾取不准确的原因_使用射线获取模型名称不准确怎么卖解决

使用射线获取模型名称不准确怎么卖解决

首先要关注THREE.Raycaster的属性,从three.js官网给出的例子[webgl_interactive_lines.html]可以得知此函数,可以控制线的精确度。

raycaster.params.Line.threshold = 0.05 ;

由于浏览器是一个2d视口,而在里面显示three.js的内容是3d场景,所以,现在有一个问题就是如何将2d视口的xy坐标转换three.js场景中的3d坐标。

然后要关注是否是全屏的canvas。

  1. spriteClick: function (event) {
  2. event.preventDefault();
  3. // 鼠标转换三维坐标
  4. // this.mouse.x = (event.clientX / document.getElementById("other").offsetWidth) * 2 - 1;
  5. // this.mouse.y = -(event.clientY / document.getElementById("other").offsetHeight) * 2 + 1;
  6. //this.mouse.x = ( event.offsetX / this.goldenContainer.width ) * 2 - 1;
  7. //this.goldenContainer.width 当前画布的高
  8. // this.mouse.y = - (event.offsetY / this.goldenContainer.height) * 2 + 1;
  9. //this.goldenContainer.height 当前画布的宽
  10. this.mouse.x = ((event.clientX - document.getElementById("deviceCanvas").getBoundingClientRect().left) / document.getElementById("deviceCanvas").offsetWidth) * 2 - 1;
  11. this.mouse.y = -((event.clientY - document.getElementById("deviceCanvas").getBoundingClientRect().top) / document.getElementById("deviceCanvas").offsetHeight) * 2 + 1;
  12. let standardVector = new THREE.Vector3(this.mouse.x, this.mouse.y, 1);// 标准设备坐标
  13. // 标准设备坐标转世界坐标
  14. let worldVector = standardVector.unproject(this.camera);
  15. // 射线投射方向单位向量(worldVector坐标减相机位置坐标)
  16. let ray = worldVector.sub(this.camera.position).normalize();
  17. this.raycaster = new THREE.Raycaster(this.camera.position, ray);
  18. // 设置要获取的相交对象(数组)
  19. const objs = this.raycaster.intersectObjects(meshList, true);
  20. if (objs.length > 0) {
  21. // code......
  22. }
  23. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/95836
推荐阅读
相关标签
  

闽ICP备14008679号