1

从小的three.js 视口中选取对象时,我获得了一种从小型(非全屏)画布中鼠标选取对象的方法。
但现在我想显示同一场景的 N 个不同视图,并且还能够进行对象拾取。

为避免复杂性:-
我不希望在一个画布上拥有 N 个视口(根据http://webglsamples.googlecode.com/hg/multiple-views/multiple-views.html
并且我不喜欢进行画布复制(如根据 gman在多个画布上显示不同场景共享资源中的好方法)。

我正在考虑为每个世界对象创建多个三个网格对象(克隆),每个场景一个克隆:渲染器:画布。
然后我只需要保持同步克隆的属性。

其他人已经这样做了吗?我是否忽略了任何陷阱?

更新 20151202

克隆方法工作正常,但最终我使用了我的答案中提到的多视口多渲染器解决方案(如下)。

现在,我使用一个全屏渲染器,多个视口由多个摄像机提供,都在一个场景中。

4

2 回答 2

0

这在完全相同的情况下对我有用。你能检查一下吗?

var obj = new THREE.Object3D();
function traverseChild( elem ) {
    if(elem.children instanceof Array && elem.children.length > 0) {
        for(var k in elem.children) {
            traverseChild(elem.children[k]);
            }
        } 

        if (elem instanceof THREE.Mesh) {
            var mesh = new THREE.Mesh(elem.geometry.clone(), elem.material.clone());
            mesh.scale.copy(elem.scale);
            mesh.rotation.copy(elem.rotation);
            mesh.position.copy(elem.position);
            obj.add(mesh);
        }
    }

traverseChild(target);

scene.add(obj);
于 2013-12-25T19:10:22.770 回答
0

对我来说,克隆对象并不优雅。

最终我想出了如何从同一场景的不同视口中挑选对象。诀窍涉及一个场景、多个视口和渲染器

以下不断发展的 html 应用程序使用了该方法,但我担心它与许多其他(混乱)代码混合在一起:- http://www.zen226082.zen.co.uk/TRI_VP.html 最好使用 Chrome/Opera 查看(在 Windows 7 上)或 Firefox(在 Android 上)。

单击键 <1> 或 <3> 以启用左右视口。然后,当您在三个视口中的任何一个中单击对象时,文本字段将报告对象名称,并且可能会发生其他一些操作,例如声音或对象颜色的变化或跳转到不同的网页。

关键子程序是 SOW_MouseClick_Maybe_on_Object。

于 2014-01-06T14:32:31.543 回答