当其他3D可视化软件纠正

时间:2017-09-17 18:24:05

标签: three.js

我最近遇到了一个非常奇怪的错误。

让我先给你看一些照片。

下面的图片是从不同的软件获得的结果w.r.t相同的.obj网格。

  1. 来自win10的3D构建器

    check here......

  2. 来自three.js的
  3. check here

  4. 请忽略色差,您可能会注意到盒子对象的位置不同而文件对象会崩溃。

    我使用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

0 个答案:

没有答案