Three.js raycast产生空的交叉数组

kev*_*400 2 javascript three.js raycasting

我试图检测用户何时在我的3D场景中点击了一个特定的立方体我看到了一些类似的问题,但似乎没有一个像我一样的问题.

我有一个3D数组的立方体,填充和显示正常,但当我的鼠标按下功能被调用时,相交数组总是空的 - 我看不出有什么问题,并希望得到任何帮助.

我的渲染器设置如下:

function setupRenderer()
{
    renderer = new THREE.WebGLRenderer({antialias: true});
    renderer.setSize(window.innerWidth, window.innerHeight);
    renderer.setClearColorHex( 0xEEEEEE, 1 );
    renderer.domElement.addEventListener( 'mousedown', onDocumentMouseMove, false );
    $('body').append(renderer.domElement);
}
Run Code Online (Sandbox Code Playgroud)

并且事件处理程序是:

function onDocumentMouseDown(event)
{
    console.log("mouse clicked!");
    event.preventDefault();
    if(event.target == renderer.domElement)
    {
        var mouseX = (event.clientX / window.innerWidth)*2-1;
        var mouseY = -(event.clientY /window.innerHeight)*2+1;

        var vector = new THREE.Vector3(mouseX, mouseY, 0.5);
        projector.unprojectVector(vector, camera);

        var raycaster = new THREE.Raycaster(camera.position, vector.subSelf(camera.position).normalize());
        var intersects = raycaster.intersectObjects(cubes);
        console.log("intersects.length: " + intersects.length);
        if ( intersects.length > 0 ) {
            console.log("intersected objects");
            /* do stuff */
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以在http://kev-adsett.co.uk/experiments/three.js/experiment1/查看当前的项目.

Wes*_*ley 8

您需要将一个对象数组传入

var intersects = raycaster.intersectObjects( objects );
Run Code Online (Sandbox Code Playgroud)

如果对象数组是分层的(即其中一个对象有子),那么您需要以这种方式指定它:

var intersects = raycaster.intersectObjects( objects, true );
Run Code Online (Sandbox Code Playgroud)

你也可以传入scene.children.

此功能不适用于"立方体"数据结构.

three.js r.54