THREE.SmoothShading对几何没有影响

时间:2017-04-13 14:03:11

标签: javascript three.js

平滑着色似乎对我的模型没有影响 - 多边形清晰可见,并且在三个.js检查器中的平滑着色和平面着色之间切换无效。 obj中存在顶点法线数据,因此使用geometry.computeVertexNormals()不应该像其他一些帖子所建议的那样需要。

使用THREE.WebGLRenderer

任何线索赞赏:)

obj,mtl,img files

这是我的装载机功能:

var mtlLoader = new THREE.MTLLoader();
        mtlLoader.setBaseUrl(pathToLoad);
        mtlLoader.setPath(pathToLoad);                       
        mtlLoader.load('model_mesh.obj.mtl', function (materials) {
            materials.preload();
            var objLoader = new THREE.OBJLoader();
            objLoader.setMaterials(materials);
            objLoader.setPath(pathToLoad);
            objLoader.load('model_mesh.obj', function (obj) {
                obj.name = pathToLoad.substring(12, 17);
                testArray.push(obj);
                scene.add(obj);  
                loadNextPath(); 
            });
        });

screenshot, polygons visible

1 个答案:

答案 0 :(得分:5)

问题在于您的模型。它有"扁平"顶点法线。

enter image description here

如果您不想修复模型,可以使用类似这样的模式重新计算平滑顶点法线:

loader.load( 'model_mesh.obj', function( object ) {

    var mesh = object.children[ 0 ];

    mesh.geometry = new THREE.Geometry().fromBufferGeometry( mesh.geometry );

    mesh.geometry.mergeVertices();

    mesh.geometry.computeVertexNormals();

    // convert back to BufferGeometry prior to rendering
    mesh.geometry = new THREE.BufferGeometry().fromGeometry( mesh.geometry );

    scene.add( object );

});

three.js r.95