在没有FPS下降的情况下有效地生成块/体素地形?

时间:2013-03-21 20:25:17

标签: three.js terrain physijs

我在使用Three.JS生成/显示地形时遇到一些麻烦,没有主要的FPS掉落。这是我编写的用于创建每个块并设置正确位置的代码:

var TO_METERS = 10;
var testOb = [];

var blockGeometry = new THREE.CubeGeometry(TO_METERS, TO_METERS, TO_METERS);
var blockMat = new THREE.MeshLambertMaterial({color: 0xFFFFFF, wrapAround: true, side: THREE.FrontSide, shading: THREE.FlatShading});

function loadChunk(startX, startY, startZ) {
    var yVar = 0;
    var zVar = 0;
    var blockCo = 0;
    var combinedGeometry = new THREE.CubeGeometry(0, 0, 0);

    for (var x = 0; x <= 4999; x++) {
        testOb[x] = new THREE.Mesh();
            testOb[x].geometry = blockGeometry;

        if (blockCo == 10) {
            blockCo = 0;

            if (zVar == 90) {
                yVar += TO_METERS;
                zVar = 0;
            }
            else {
                zVar += TO_METERS;
            }
        }

        testOb[x].position.x = (blockCo * TO_METERS) + startX;
        testOb[x].position.y = (yVar - 500) + startY;
        testOb[x].position.z = zVar + startZ;

        testOb[x].castShadow = true;
        blockCo++;

        THREE.GeometryUtils.merge(combinedGeometry, testOb[x]);
    }

    var cMesh = new Physijs.BoxMesh(combinedGeometry, blockMat, 0);
    scene.add(cMesh);
}

基本上它创建每个块,设置位置并使用THREE.GeometryUtils.merge将它们合并在一起构成一个“块”(矩形)MineCraft样式。

我很确定构成每个块的大量单个块导致低FPS。 With only 10 chunks the FPS is fine。如果我再添加FPS会大幅下降。

我有一个想法是使用WebWorker进行处理,但原因是不可能的,因为我无法添加块或甚至在其中使用Three.JS。这也只会有助于加载时间,而不是我遇到的FPS问题。

如果有人有任何想法我将如何解决这个问题,我真的很感激。 :)也许有可能隐藏相机看不到的块?或者我可能完全以错误的方式做到这一点。谢谢!

0 个答案:

没有答案