2013-12-03 4 views
3

Я попытался реализовать функцию для выбора и перемещения объектов в составе сцены орфографической камеры.Ортографическая камера и сборщик?

Я хотел бы получить тот же пример: http://threejs.org/examples/webgl_interactive_draggablecubes.html

но не с перспективой камеры.

я уже заменил:

var camera = new THREE.PerspectiveCamera(45, window.innerWidth/window.innerHeight, 1, 1000); 

с:

var camera = new THREE.OrthographicCamera(window.innerWidth/-zoom, window.innerWidth/zoom, window.innerHeight/zoom, window.innerHeight/-zoom, -1000, 1000); 

и заменить это:

var ray = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 

этим:

var ray = projector.pickingRay(vector, camera); 

Но, похоже, этого недостаточно.

Итак, что ему недостает?

Можно ли использовать проектор и репер с ортографической камерой?

Спасибо.

ответ

2

Пожалуйста, попробуйте этот код в образце:

event.preventDefault(); 
    if (event.button === 0) { 

     var projector = new THREE.Projector(); 
     var vector = new THREE.Vector3((event.clientX/window.innerWidth) * 2 - 1, -(event.clientY/window.innerHeight) * 2 + 1, 0.5); 
     // use picking ray since it's an orthographic camera 
     var raycaster = projector.pickingRay(vector, camera); 
     //ditermine whether any of the supplied objects are hit by this ray  
     var intersertsObj = raycaster.intersectObjects(_entities); 
     // _entities : is array entities you put to scence 
     // you can store this list before you entity to scence: 
     // _entities.push(entity); 
     // scene.add(entity); 
     if (intersertsObj.length > 0) {   
      var pickedObject = intersertsObj[0];    
     }  
    } 
    event = null; 

это прекрасно работает в моем проекте.

0

Существует функция Raycaster.setFromCamera(), которая была введена после того, как этот вопрос изначально был задан. Он специально обрабатывает орфографические камеры, поэтому я считаю, что теперь это лучший способ решить эту проблему.