2013-01-06 1 views
1

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()을 사용한 후 객체의 새 위치와 교차하도록합니다. 교차 시키면 객체를 움직일 수 있고 교차 좌표도 움직이는 것처럼 보입니다. 장면에 추가 한 후에 개체를 움직이는 것이 더 좋을까요? 차이점이 있습니까?

+0

답변을 아는 사람은 아무도 없습니다 ...? – SacWebDeveloper

답변

1

이 질문은 조금 오래되었지만 아마도 도움이 될 것입니다. 비슷한 문제가있었습니다. three.js는 광선 교차에 대한 객체 월드 변환 행렬을 사용하고 작업 순서에 따라 position.set(); 이후와 raycaster.intersectObject(); 호출 전에 업데이트되지 않았을 수 있습니다. 나는 이것이 장면에서 렌더링 될 때 이것이 자동적으로 3 번 수행된다고 생각하지만, 제 경우에는 그 물체가 실제로 장면 안에 있지 않습니다. 레이 캐스팅을하기 전에 object.updateMatrixWorld()으로 전화하면됩니다.

관련 문제