2012-09-19 5 views
1

내 프로토 타입 시스템에는 Collada 파일을 클릭 할 때 교차를 감지하는 기능이 있습니다.Collada (Ray Casting)의 Three.JS- 교차로 교차

function Intersectfun (event) { 
    mouse.x = (event.clientX/window.innerWidth) * 2 - 1; 
    mouse.y = - (event.clientY/window.innerHeight) * 2 + 1; 
    var vector = new THREE.Vector3(mouse.x, mouse.y, 1); 
    var toIntersect = []; 
    THREE.SceneUtils.traverseHierarchy(scene, function (child) { 
    if (child instanceof THREE.Mesh) { 
    toIntersect.push(child); 
    } 
    }); 
    // Unproject the vector 
    projector.unprojectVector(vector, camera); 
    var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize()); 
    var intersects = ray.intersectObjects(toIntersect); 
    if(intersects.length){ 
    target = intersects[0].object; 
    } 
} 

하지만이 사용할 때 : :이 교차 기능은 다음과 같습니다

controls = new THREE.TrackballControls(camera, renderer.domElement); 

을 매트릭스가 비어 교차 및 교차를 감지 할 수 없습니다!

하지만 사용할 때 :

controls = new THREE.TrackballControls(camera); 

내가 교차 행렬을 얻을 수 있습니다 그것은 매우 잘 작동하지만, 또 다른 문제가 드러난다 (에서 이쪽을 봐 : Three.JS -- conflict Camera controls with a textbox in a scene)

코드가에 있습니까 위의 함수? 자세한 내용은 간단한 카메라를 사용했습니다.

camera = new THREE.PerspectiveCamera(40, window.innerWidth/window.innerHeight, 1, 10000); 

감사합니다.

답변

1

이것은 콜라주 문제점이 아닙니다. , 즉

// container 
container = document.createElement('div'); 
document.body.appendChild(container); 

// renderer 
renderer = new THREE.WebGLRenderer(); 
renderer.setSize(window.innerWidth, window.innerHeight); 
container.appendChild(renderer.domElement); 

//controls 
controls = new THREE.TrackballControls(camera, container); 

을 제어 트랙볼 두 번째 인수로 container보다는 renderer.domElement를 사용

대신이 작업을 수행합니다.

http://jsfiddle.net/QXUwa/