2015-11-24 2 views
0

У меня возникли проблемы с попыткой написать единичный тест для проверки обнаружения столкновений. Я упрощаю код, как только это возможно - у меня есть плоскость в (0, 0, 0), и я делаю raycasting сверху этой плоскости (от (0, 100, 0)) до нижней (0, -1, 0) и I предположим, что найти пересечения с этой плоскостью, но не повезло.threejs raycasting не работает

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); 

Что здесь не так? Почему этот простой код не показывает пересечений? (R73).

jsfiddle example

ответ

3

Вам необходимо обновить мировое преобразование основной сетки до raycasting. (Как правило, визуализатор делает это для вашего в 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); 

Three.js R.73

+0

спасибо, я должен прочитать больше о 'updateMatrixWorld' – SET

Смежные вопросы