Three.js将多个立方体添加到场景的更好方法

时间:2014-12-29 14:09:47

标签: javascript 3d three.js

我是trijs的新手,我正在查看raycasting tutorial 其中作者在场景中添加了立方体,如下所示:

geom = new THREE.CubeGeometry( 5, 5, 5 );

cubes = new THREE.Object3D();
scene.add( cubes );

for(var i = 0; i < 100; i++ ) {
        var grayness = Math.random() * 0.5 + 0.25,
                mat = new THREE.MeshBasicMaterial(),
                cube = new THREE.Mesh( geom, mat );
        mat.color.setRGB( grayness, grayness, grayness );
        cube.position.set( range * (0.5 - Math.random()), range * (0.5 - Math.random()), range * (0.5 - Math.random()) );
        cube.rotation.set( Math.random(), Math.random(), Math.random() ).multiplyScalar( 2 * Math.PI );
        cube.grayness = grayness; // *** NOTE THIS
        cubes.add( cube );
}

理解这里发生的事情非常容易,但我的问题是:

如果您将多个多维数据集添加到Object3D而不是将每个多维数据集分别添加到场景中,是否有任何好处?

我最感兴趣的是你使用raycasting的场景,在某些情况下你必须同时为所有立方体(大约200个立方体或平面)设置动画。

1 个答案:

答案 0 :(得分:2)

将多维数据集添加到Object3D会将它们组合在一起,但每个网格将按顺序呈现。据我所知,获得渲染许多立方体的性能的一种方法是使用THREE.GeometryUtils.merge()合并它们。这在以下博客中描述:

http://learningthreejs.com/blog/2011/10/05/performance-merging-geometry/

如果您想使用光线投射,则可以选择单个面,如下例所示:

http://stemkoski.github.io/Three.js/Mouse-Click.html

但是,对于200个立方体,您可能不需要沿着网格合并路线走下去。