拾取通过 OBJMTLLoader 加载的 Object3D [英] Picking Object3D loaded via OBJMTLLoader

查看:20
本文介绍了拾取通过 OBJMTLLoader 加载的 Object3D的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我们使用 OBJMTLLoader 加载 Object3D 时,无法使用 raycaster 来使用鼠标拾取该对象.交点数组长度始终为 0.有人知道原因吗?下面是代码...

When we load an Object3D with OBJMTLLoader, it is not possible to use raycaster to pick this object with mouse. Intersection array length is always 0. Any one knows the reason? Below is the code...

加载例程

            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();
        }
    }

场景是整个浏览器窗口.可以选择通过三种类型创建的任何其他网格,但 object3d 不能...

The scene is the whole browser window. Any other mesh cerated via THREE types can be picked, but object3d not...

感谢大家的帮助

推荐答案

像这样添加递归标志:

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

three.js r.66

three.js r.66

这篇关于拾取通过 OBJMTLLoader 加载的 Object3D的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆