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