【问题标题】:Multiple Voxels with different texture. Performance具有不同纹理的多个体素。表现
【发布时间】:2012-08-09 00:04:20
【问题描述】:

我需要向同一个场景几何体添加多个体素(立方体相等),但每个体素具有不同的纹理。

由于体素超过 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);

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    您需要将所有立方体批处理成一个几何体。

    看看这个例子: http://mrdoob.github.com/three.js/examples/webgl_geometry_minecraft.html

    【讨论】:

    • 你应该批准答案然后:)
    • 但是之后你如何挖掘单个立方体,或者选择单个立方体???
    【解决方案2】:

    最后我创建了一个包含所有立方体的 geoemtry 合并。

    在此更改之前,我通过鼠标单击立方体来处理交叉点。

    我尝试解决这个问题,但没有成功:

    使用所有网格添加几何合并和数组的代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多