threejs射线广播不起作用

SET*_*SET 0 three.js

我在尝试编写单元测试以检查冲突检测时遇到问题。我尽可能地简化代码-我在(0,0,0)中有一个平面,并且从该平面上方(从(0,100,0))到底部(0,-1,0)进行光线投射假设找到与该平面的交点,但没有运气。

console.clear();
var intersections,
    from = new THREE.Vector3(0, 100, 0);
    direction = new THREE.Vector3(0, -1, 0),
    raycaster = new THREE.Raycaster();

var geometry = new THREE.PlaneGeometry(10, 10, 1, 1);
var ground = new THREE.Mesh(geometry);
ground.position.set(0, 0, 0);
ground.rotation.x = THREE.Math.degToRad(-90);

raycaster.set(from, direction);
intersections = raycaster.intersectObjects([ground]);
console.log(intersections);
Run Code Online (Sandbox Code Playgroud)

怎么了 为什么这个简单的代码不显示任何交集?(r73)。

jsfiddle示例

Wes*_*ley 5

在进行射线投射之前,您需要更新地面网格物体的世界变换。(通常,渲染器在render()通话中为您执行此操作。)

console.clear();
var intersections,
    from = new THREE.Vector3(0, 100, 0);
    direction = new THREE.Vector3(0, -1, 0),
    raycaster = new THREE.Raycaster();

var geometry = new THREE.PlaneGeometry(10, 10, 1, 1);
var ground = new THREE.Mesh(geometry);
ground.position.set(0, 0, 0);
ground.rotation.x = THREE.Math.degToRad(-90);

ground.updateMatrixWorld(); // add this

raycaster.set(from, direction);
intersections = raycaster.intersectObjects([ground]);
console.log(intersections);
Run Code Online (Sandbox Code Playgroud)

three.js r.73