Three.js를 사용하여 position.set()을 사용하여 객체를 배치 할 때 THREE.Raycaster는 새 설정 위치에 대한 객체를 알 수 없습니다. 개체를 0,0,0에두면 메쉬가 제대로 교차됩니다.THREE.Raycaster가 position.set() 이후에 원래의 메쉬 위치를 교차합니다.
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 (주) 호출, I testRay는()를 확인합니다.
function main(){
// some other code
testRay(character,targets,30)
window.requestAnimationFrame(main);
}
그래, 문제가 교차시키지 않는 것이 좋습니다. 생성하는 동안 position.set()을 사용한 후 객체의 새 위치와 교차하도록합니다. 교차 시키면 객체를 움직일 수 있고 교차 좌표도 움직이는 것처럼 보입니다. 장면에 추가 한 후에 개체를 움직이는 것이 더 좋을까요? 차이점이 있습니까?
답변을 아는 사람은 아무도 없습니다 ...? – SacWebDeveloper