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