ThreeJS:使用正交相机(R92)将2D坐标转换为3D坐标

时间:2019-04-30 15:15:52

标签: javascript three.js 3d

在正交相机的场景中,如何将2D屏幕位置(例如鼠标位置)转换为3D世界位置?我发现的所有解决方案都使用raycaster。但是我需要不使用的raycaster,因为在该位置上可能没有要拾取的物体。

以下示例适用于透视相机(对于正交相机,我需要类似的解决方案):

function from2Dto3D( canvas, camera, screenX, screenY )
{
    // canvas: canvas object
    // camera: camara object
    // screenX, screenY: the 2d screen position

    // normalize the 2D position:
    var vector = new THREE.Vector3();
    vector.set(
        ( screenX / canvas.width  ) * 2 - 1,
         - ( screenY / canvas.height ) * 2 + 1,
        0.5
    );
    vector.unproject( camera );

    // 3D y position is 0:
    var groundY = 0;

    var dir = vector.sub( camera.position ).normalize();
    var distance = (groundY - camera.position.y) / dir.y;
    var vec3 = camera.position.clone().add( dir.multiplyScalar( distance ) );

    // return: a vector3 with the 3d position:
    return vec3;
}

0 个答案:

没有答案