Използвайки Three.js, когато позиционирам обект с помощта на position.set(), THREE.Raycaster изглежда не знае за новата зададена позиция на обектите. Ако оставя обектите на 0,0,0, мрежата се пресича правилно.
function init(){
var targets = [];
var object;
// More scene initializing code...
// creating a cube object and placing it at (-10,0,-10)
var objectGeometry = new THREE.CubeGeometry(2,2,2);
var objectMaterial = new THREE.PhongMeshMaterial({color: 0xEEEEEE });
object = new THREE.Mesh(objectGeometry, objectMaterial);
object.position.set(-10, 0, -10);
scene.add(object);
targets.push(object);
// more objects created and added to the scene
}
Имам контролер за символи, който мога да движа с камера, която следва, така че включвам героя (obj) и целите за тестване във функция testRay();
function testRay(obj,targets,distance){
// code to keep the ray pointing out in front of the character at all times
var endRayX = (Math.cos((270*(Math.PI/180))-obj.rotation.y)*distance + obj.position.x);
var endRayZ = (Math.sin((270*(Math.PI/180))-obj.rotation.y)*distance + obj.position.z);
var vector = new THREE.Vector3(endRayX,obj.position.y,endRayZ);
var raycaster = new THREE.Raycaster(obj.positon,vector);
intersects = raycaster.intersectObjects(targets);
if(intersects.length>0){
console.log("intersects.length: "+ intersects.length);
console.log("intersects.distance: "+ intersects[0].distance);
console.log("intersects.face: "+ intersects[0].face);
console.log("intersects.point: " + intersects[0].point);
console.log("intersects.object: " + intersects[0].object);
}
}
След това при всяко извикване на requestAnimationFrame(main) тествамRay() включвам контролера на знаците и целите, за да видя дали се пресичат.
function main(){
// some other code
testRay(character,targets,30)
window.requestAnimationFrame(main);
}
Добре, така че проблемът е да не го накараш да се пресече, това работи чудесно. Той го кара да пресича новото местоположение на обектите след използване на position.set() по време на създаването. Забелязах, че мога да местя обекти просто като ги пресичам и това изглежда също премества координатите на пресичането. Би ли било по-добре да преместите обекта, след като го добавите към сцената? има ли разлика