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 );

但是,它似乎还不足以运行。

那么,它缺少什么?

是否可以将投影仪和射线与 OrthographicCamera 一起使用?

谢谢。

4

2 回答 2

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;

它在我的项目中运行良好。

于 2014-02-14T13:05:46.390 回答
0

Raycaster.setFromCamera()在最初提出这个问题之后,引入了一个功能。它专门处理正交相机,所以我认为这是现在解决这个问题的首选方法。

于 2017-10-23T09:27:59.397 回答