【问题标题】:Raycasting doesn't give any intersections光线投射不提供任何交叉点
【发布时间】:2017-10-09 21:27:18
【问题描述】:

我正在尝试使用光线投射来获得位于场景中心的球体和光线之间的交集。这是一个非常简单的场景,但我无法让它工作。

相关代码:

// renderer, camera, etc...

var material = new THREE.MeshStandardMaterial();
material.opacity = 0.25;
material.transparent = true;
sphere = new THREE.Mesh(new THREE.SphereGeometry(100, 32, 32), material);
scene.add(sphere);

var start = new THREE.Vector3(0, 0, 0);
var direction = new THREE.Vector3(-84, 102, 97);
var ray = new THREE.Raycaster(start, direction.normalize());
scene.updateMatrixWorld();
var rayIntersects = ray.intersectObjects([sphere], true);

console.log(rayIntersects); // empty array

【问题讨论】:

  • 当您从对象内部投射光线时,它不计算背面。尝试使用var material = new THREE.MeshStandardMaterial({ side: THREE.DoubleSide });

标签: three.js raycasting


【解决方案1】:

如果你想在物体和射线之间获得交集,从物体内部投射,那么,作为一个选项,你应该使用双面材质。

像这样:

var material = new THREE.MeshStandardMaterial({ side: THREE.DoubleSide });

THREE.Raycaster() 的文档,在关于 .intersectObject ( object, recursive ) 方法的解释部分的末尾说:

请注意,对于网格,面必须指向光线的原点才能被检测到;穿过人脸背面的光线的交点将不会被检测到。要针对对象的两个面进行光线投射,您需要将材质的 side 属性设置为 THREE.DoubleSide。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2018-06-14
    • 2021-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    相关资源
    最近更新 更多