我需要向同一个场景几何体添加多个体素(立方体等于),但每个体素都有不同的纹理。
通过拥有超过500个体素,我在性能方面存在严重错误。
这是我的代码:
texture = crearTextura(voxel.text,color,voxelSize);
material = new THREE.MeshBasicMaterial({ map: texture });
mesh = new THREE.Mesh(new THREE.CubeGeometry(voxelSize, voxelSize, voxelSize, 1, 1, 1,material),faceMaterial);
scene.add(mesh);
答案 0 :(得分:6)
您需要将所有立方体批量处理为单个几何体。
看看这个例子: http://mrdoob.github.com/three.js/examples/webgl_geometry_minecraft.html
答案 1 :(得分:0)
最后,我创建了一个与所有立方体进行地质混合的方法。
在此更改之前,我已经在立方体中单击鼠标工作了交叉点。
我试着解决这个问题,但它不起作用:
使用所有网格添加几何合并和数组的代码:
var geometry = new THREE.Geometry();
for( var i = 0; i < voxels.length; i++ ){
var voxel = voxels[i];
color = voxel.color;
texture = textPlaneTexture(voxel.text,color,voxelSize);
material = new THREE.MeshBasicMaterial({ map: texture });
mesh = new THREE.Mesh(new THREE.CubeGeometry(voxelSize, voxelSize, voxelSize, 1, 1, 1, material));
mesh.name = voxel.name;
mesh.position.x = voxel.x * voxelSize + offset_x;
mesh.position.y = voxel.y * voxelSize + offset_y;
mesh.position.z = voxel.z * voxelSize + offset_z;
//
objects.push( mesh );
THREE.GeometryUtils.merge( geometry, mesh );
}
//Add geometry to scene
mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial() );
scene.add( mesh );
...
双击鼠标事件
function onDocumentMouseDoubleClick( event ) {
if (event.target instanceof HTMLCanvasElement) {
event.preventDefault();
mouse2D.x = ( event.clientX / widthChart ) * 2 - 1;
mouse2D.y = - ( (parseInt(event.clientY) - offset_mouse_y) / heightChart ) * 2 + 1;
mouse3D = projector.unprojectVector( mouse2D.clone(), camera );
ray.direction = mouse3D.subSelf( camera.position ).normalize();
var intersects = ray.intersectObjects( objects );
if ( intersects.length > 0 ) {
if ((intersects[ 0 ].object.name != 'undefined') && (intersects[ 0 ].object.name != '')) {
//Object clicked
};
};
};
};