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 が大幅に低下します。

私が持っていた 1 つの考えは、処理を行うために WebWorker を使用することでしたが、チャンクを追加したり、その中で Three.JS を使用したりすることさえできないため、それは不可能です。これは、私が抱えている FPS の問題ではなく、ロード時間の短縮にも役立ちます。

この問題を解決する方法を誰かが知っていれば、本当に感謝しています。:) カメラが見えないブロックを隠すことは可能でしょうか?または、私はそれを完全に間違った方法で行っているだけかもしれません。ありがとう!

4

0 に答える 0