javascript - 边缘几何 : raycasting not accurate

标签 javascript three.js

我在 PlaneGeometry 上使用 EdgesGeometry,它似乎在鼠标事件中创建了一个更大的碰撞框。然而,当使用 CircleGeometry 时,这一点并不明显。我有以下内容:

    createPanel = function(width, height, widthSegments) {

      var geometry = new THREE.PlaneBufferGeometry(width, height, widthSegments);

      var edges = new THREE.EdgesGeometry( geometry );

      var panel = new THREE.LineSegments( edges, new THREE.LineBasicMaterial({ 
      color: 0xffffff }));

      return panel;

    }

   var tile = createPanel(1.45, .6, 1);

现在我正在使用一个名为 RayInput 的库,它为我完成所有光线转换,但想象一下我只是使用普通的光线转换器来处理鼠标事件。没有边缘并且仅使用平面,碰撞边界是准确的。

添加 EdgesGeometry 后,垂直碰撞箱似乎显着增加,因此,当我什至没有单击该对象时,就会检测到该对象被单击。水平碰撞箱似乎仅略有增加。我以前从未使用过 EdgesGeometry,所以有人知道发生了什么吗?

提前致谢。

最佳答案

如果您针对 THREE.LineTHREE.LineSegments 进行光线转换,则应将 Line.threshold 参数设置为适合的值场景的规模:

raycaster.params.Line.threshold = 0.1; // default is 1

三.js r.114

关于javascript - 边缘几何 : raycasting not accurate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46687628/

相关文章:

javascript - 无法读取未定义的属性 '#<Object>' 出现错误?

javascript - Three.js 去除内面

javascript - Three.js: "select tool"如何检测2D正方形与3D物体的交集

javascript - Three.js 纹理未应用于网格

three.js - 重置由 EffectComposer 破坏的深度缓冲区

javascript - 如何检查评估名称是否未定义

javascript - 在 JavaScript 中使用过滤元素属性创建对象

javascript - jQuery 函数在单击之前启动,为什么?

javascript - 将样式限制在特定区域的 jQuery 插件

javascript - 为什么在 WebXR 中光线转换方向计算不正确?