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 の問題ではなく、ロード時間の短縮にも役立ちます。
この問題を解決する方法を誰かが知っていれば、本当に感謝しています。:) カメラが見えないブロックを隠すことは可能でしょうか?または、私はそれを完全に間違った方法で行っているだけかもしれません。ありがとう!