Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 3.SmoothShading对几何体没有影响_Javascript_Three.js - Fatal编程技术网

Javascript 3.SmoothShading对几何体没有影响

Javascript 3.SmoothShading对几何体没有影响,javascript,three.js,Javascript,Three.js,平滑着色似乎对我的模型没有影响-多边形清晰可见,在three.js inspector中在平滑着色和平面着色之间切换没有影响。obj中有顶点法线数据,因此不需要使用几何体。computeVertexNormals()不应该像其他几篇文章中建议的那样 使用THREE.webgl渲染器 感谢您的任何线索:) 这是我的加载器函数: var mtlLoader = new THREE.MTLLoader(); mtlLoader.setBaseUrl(pathToLoad);

平滑着色似乎对我的模型没有影响-多边形清晰可见,在three.js inspector中在平滑着色和平面着色之间切换没有影响。obj中有顶点法线数据,因此不需要使用几何体。computeVertexNormals()不应该像其他几篇文章中建议的那样

使用THREE.webgl渲染器

感谢您的任何线索:)

这是我的加载器函数:

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(); 
            });
        });

问题出在您的型号上。它具有“平坦”顶点法线

如果不想修复模型,可以使用如下模式重新计算平滑顶点法线:

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 );

});
3.js r.95