Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Three.js 3.js/crossion_Three.js - Fatal编程技术网

Three.js 3.js/crossion

Three.js 3.js/crossion,three.js,Three.js,在我的three.js场景中,我有一些立方体。我想为用户提供用鼠标选择一个框的可能性 这是重要的代码(我使用Three.js版本69): 当我单击一个立方体时,所选的点(相交点)与我单击的位置不完全相同(接近,但不完全相同)。这就像是一个转变,一个翻译(我试着用正交或透视相机…同样的问题) 欢迎任何帮助 谢谢正如WestLangley向我建议的那样,答案是关于画布的偏移量。他在这里写了一个很好的解释看看是否对你有帮助。太完美了!谢谢! function init() { [...]

在我的three.js场景中,我有一些立方体。我想为用户提供用鼠标选择一个框的可能性

这是重要的代码(我使用Three.js版本69):

当我单击一个立方体时,所选的点(相交点)与我单击的位置不完全相同(接近,但不完全相同)。这就像是一个转变,一个翻译(我试着用正交或透视相机…同样的问题)

欢迎任何帮助


谢谢

正如WestLangley向我建议的那样,答案是关于画布的偏移量。他在这里写了一个很好的解释

看看是否对你有帮助。太完美了!谢谢!
function init() {
    [...]
    camera = new THREE.PerspectiveCamera(VIEW_ANGLE,ASPECT,NEAR,FAR);
    [...]
    // in a 'for' iteration, I a many boxes in a 'objects' array :
        abox = new THREE.Mesh( geometry, material );
        objects.push( abox );
    [...]
    vector = new THREE.Vector3(0,0,0);
    raycaster = new THREE.Raycaster();
    animate();  
    document.addEventListener( 'mousedown', onDocumentMouseDown, false     );  
}


function onDocumentMouseDown( event ) {
    event.preventDefault();
    if ( camera instanceof THREE.OrthographicCamera ) {
        vector.set( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, - 1 );
        vector.unproject( camera );
        dir.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );
        raycaster.set( vector, dir );
    } else if ( camera instanceof THREE.PerspectiveCamera ) {
        vector.set( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );
        vector.unproject( camera );
        raycaster.set( camera.position, vector.sub( camera.position ).normalize() );
    }

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

    if ( intersects.length > 0 ) {

        var intersect = intersects[ 0 ];

        // change color of the face
        intersect.object.material.color.setHex( Math.random() * 0xFF0000 );

        renderer.render(scene, camera);

        }

    }