我是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个立方体或平面)设置动画。
答案 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个立方体,您可能不需要沿着网格合并路线走下去。