Three.js加载大量对象后白屏
Three.js white screen after loading a lot of objects
我正在从 JSON 个文件中加载大量(超过 4350 个)3D 对象。
for (var y in game.fields) {
for (var x in game.fields[y]) {
switch (game.fields[y][x]) {
case 'm':
Three.loadMountain(x, y)
break
case 'h':
Three.loadHill(x, y)
break
}
}
}
我可以看到屏幕上出现了物体,但在某个时刻一切都变白了。它可以是什么?我可以以某种方式调试它吗?控制台中没有消息,我使用的是 Chromium 浏览器。
方法:
this.loadMountain = function (x, y) {
loader.load('/models/mountain.json', getGeomHandler('#808080', x * 4 - 216, y * 4 - 311, 1));
}
this.loadHill = function (x, y) {
loader.load('/models/hill.json', getGeomHandler('#008000', x * 4 - 216, y * 4 - 311, 1));
}
解决方案:不要在循环中使用 loader.load。而是在回调函数内将网格添加到场景。
示例:
loader.load('/models/mountain.json', function(geometry){
var material = new THREE.MeshLambertMaterial({color: '#808080'})
for (var y in game.fields) {
for (var x in game.fields[y]) {
switch (game.fields[y][x]) {
case 'm':
var mesh = new THREE.Mesh(geometry, material);
mesh.position.set(x, 0, y);
scene.add(mesh);
break
}
}
}
});
我正在从 JSON 个文件中加载大量(超过 4350 个)3D 对象。
for (var y in game.fields) {
for (var x in game.fields[y]) {
switch (game.fields[y][x]) {
case 'm':
Three.loadMountain(x, y)
break
case 'h':
Three.loadHill(x, y)
break
}
}
}
我可以看到屏幕上出现了物体,但在某个时刻一切都变白了。它可以是什么?我可以以某种方式调试它吗?控制台中没有消息,我使用的是 Chromium 浏览器。
方法:
this.loadMountain = function (x, y) {
loader.load('/models/mountain.json', getGeomHandler('#808080', x * 4 - 216, y * 4 - 311, 1));
}
this.loadHill = function (x, y) {
loader.load('/models/hill.json', getGeomHandler('#008000', x * 4 - 216, y * 4 - 311, 1));
}
解决方案:不要在循环中使用 loader.load。而是在回调函数内将网格添加到场景。
示例:
loader.load('/models/mountain.json', function(geometry){
var material = new THREE.MeshLambertMaterial({color: '#808080'})
for (var y in game.fields) {
for (var x in game.fields[y]) {
switch (game.fields[y][x]) {
case 'm':
var mesh = new THREE.Mesh(geometry, material);
mesh.position.set(x, 0, y);
scene.add(mesh);
break
}
}
}
});