我在尝试编写单元测试以检查冲突检测时遇到问题。我尽可能地简化代码-我在(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)。
在进行射线投射之前,您需要更新地面网格物体的世界变换。(通常,渲染器在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