0

我在使用 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。只有 10 个块,FPS 很好。如果我再添加,FPS 会急剧下降。

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

如果有人对我将如何解决此问题有任何想法,我将不胜感激。:) 也许可以隐藏相机看不到的块?或者我可能只是完全以错误的方式做事。谢谢!

4

0 回答 0