选择通过OBJMTLLoader加载的Object3D

时间:2014-03-06 15:02:29

标签: three.js

当我们使用OBJMTLLoader加载Object3D时,无法使用raycaster用鼠标选择此对象。交点数组长度始终为0.任何人都知道原因吗?以下是代码......

加载程序例程

            var loader2 = new THREE.OBJMTLLoader();
        loader2.load('/assets/unwrap/masa/dogtasmasa.obj', '/assets/unwrap/masa/dogtasmasa.mtl', function (object) {
            object.position.y = 1.5;
            object.position.x = 0;
            object.position.z = 2;
            object.rotateX(-Math.PI / 2);
            object.rotateZ(-Math.PI / 2);
            object.scale.set(0.04, 0.04, 0.04);
            object.castShadow = true;
            scene.add(object);
        });

和采摘

        function onDocumentMouseDown(event) {

        event.preventDefault();

        SCREEN_WIDTH = window.innerWidth - 5;
        SCREEN_HEIGHT = window.innerHeight - 5;

        var vector = new THREE.Vector3((event.clientX / SCREEN_WIDTH) * 2 - 1, -(event.clientY / SCREEN_HEIGHT) * 2 + 1, 0.5);
        projector.unprojectVector(vector, camera);
        var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize());
        var intersects = raycaster.intersectObjects(scene.children);


        if (intersects.length > 0) {
            for (var i = 0; i < intersects.length; i++) {
                var obj = intersects[i].object;
                    controls.enabled = false;
                    tControls.attach();
            }
        }
        else {
            controls.enabled = true;
            tControls.detach();
        }
    }

场景是整个浏览器窗口。可以选择通过THREE类型调出的任何其他网格,但是object3d不是......

感谢各种帮助

1 个答案:

答案 0 :(得分:1)

像这样添加递归标志:

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

three.js r.66