three.js 正交相机对象拾取

标签 three.js raycasting orthographic picking

我正在尝试在使用正交相机的场景中挑选对象。 我的代码片段已经可以工作,但并不精确。 我已经在 stackoverflow 上找到了一些答案,但这些已被弃用或根本不再适用。 这是我的代码 onMouseDown

function onDocumentMouseUp( event ) {
    event.preventDefault();

    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, 0.5);
    var pos = camera.position;
    var ray = new THREE.Raycaster(pos, vector.unproject(camera).sub(camera.position).normalize());

    var intersects = ray.intersectObjects(objects);

    if (intersects.length > 0) {
        console.log("touched:" + intersects[0]);
    }
    else {
        console.log("not touched");
    }
}

请参阅 http://jsfiddle.net/ujzpe07t/1/

如果您单击立方体左/右/上方/下方的一些像素,它仍然告诉我该对象已被触摸。

我正在使用three.js r69。

任何提示将不胜感激。 谢谢,干杯!

最佳答案

以下是使用正交相机或透视相机进行光线转换(拾取)时使用的模式:

var raycaster = new THREE.Raycaster(); // create once
var mouse = new THREE.Vector2(); // create once

...

mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;

raycaster.setFromCamera( mouse, camera );

var intersects = raycaster.intersectObjects( objects, recursiveFlag );

three.js r.84

关于three.js 正交相机对象拾取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26652888/

相关文章:

d3.js。带酒吧的旋转地球仪

three.js - 来自 Blender Exporter 的带有 GLTF 的 Three.js 中的动画

javascript - 三.js拖动查看

performance - Box2d raycast 与 AABB 查询性能

python - 3D分形切片渲染方法验证

3d - 在 XNA 中使用 CreateOrthographicOffCenter

d3.js - DJ3S - 在正交投影中完成旋转时移除标线

canvas - Three.js canvas.toDataURL 有时为空

javascript - THREE.js 如何停止 chop 由 2D Canvas 制成的纹理中的文本

c++ - PixelToaster 库上的鼠标处理