我最近遇到了一个非常奇怪的错误。
让我先给你看一些照片。
下面的图片是从不同的软件获得的结果w.r.t相同的.obj网格。
来自win10的3D构建器
请忽略色差,您可能会注意到盒子对象的位置不同而文件对象会崩溃。
我使用OBJLoader加载这个.obj文件。
它不是奇怪的部分,让我感到困惑的是,这个obj是另一个obj的子集,在这个obj中,它实际上有14个对象,而且框和文件是唯一有问题的两个
我也确认使用MeshLab和blender,3D构建器的结果是正确的。
我使用的加载代码类似于:
var loader = new THREE.OBJLoader();
loader.load('meshes/test.obj',function(object){
console.log(object);
var divWidth = 320;
var divHeight = 240;
// camera is globally uniform
var camera = new THREE.PerspectiveCamera(30,divWidth/divHeight,0.1,1000);
camera.position.set(0,0,1);
camera.lookAt(new THREE.Vector3(0,0,0);
// geometry of objects also global
var geo;
var container = document.getElementById('test');
var scene = new THREE.Scene();
var renderer = new THREE.WebGLRenderer({preserveDrawingBuffer: true });
renderer.setSize(divWidth,divHeight);
container.appendChild(renderer.domElement);
var material = new THREE.MeshBasicMaterial({vertexColors: THREE.VertexColors});
for(i=0;i<objCount;i++){
geo=new THREE.Geometry().fromBufferGeometry(object.children[i].geometry);
j=0;
var temp=[];
for(var k=0;k<geo.faces.length;k++){
temp=objRoughRGB[i][j]; // objRoughRGB has every vertex rgb info, pre-read
geo.faces[k].vertexColors[0]=new THREE.Color(temp[0],temp[1],temp[2]);
j++;
temp=objRoughRGB[i][j];
geo.faces[k].vertexColors[1]=new THREE.Color(temp[0],temp[1],temp[2]);
j++;
temp=objRoughRGB[i][j];
geo.faces[k].vertexColors[2]=new THREE.Color(temp[0],temp[1],temp[2]);
j++;
}
geo.colorsNeedUpdate=true;
geo.elementsNeedUpdate=true;
object.children[i].geometry=geo;
object.children[i].material=material;
}
console.log(object);
console.log(object.children[0].geometry.vertices);
scene.add(object);
renderer.render(scene,camera);
});
});
我希望我已经说清楚了。 任何帮助将不胜感激!!
我不知道如何在SO上分享模型, 但我曾经在three.js github问题上分享了这个模型,因为我发现它可能是一个bug。你可以在问题的最后找到它,test.zip。 check here