Javascript THREE.js OBJLoader-加载到几何体,操纵,然后保存到BufferGeometry

Javascript THREE.js OBJLoader-加载到几何体,操纵,然后保存到BufferGeometry,javascript,three.js,smoothing,.obj,Javascript,Three.js,Smoothing,.obj,我正在尝试确定为什么无法平滑加载了OBJLoader的着色几何体 var loader = new THREE.OBJLoader(manager); loader.load('/manmodel/js/man.obj', function (object, materials) { console.log(object); console.log(materials); man = object; man.traverse(function (child) {

我正在尝试确定为什么无法平滑加载了OBJLoader的着色几何体

var loader = new THREE.OBJLoader(manager);
loader.load('/manmodel/js/man.obj', function (object, materials) {
    console.log(object);
    console.log(materials);
    man = object;
    man.traverse(function (child) {
        if (child instanceof THREE.Mesh) {
            child.geometry.computeFaceNormals();
            child.geometry.computeVertexNormals( true );
            child.material = new THREE.MeshPhongMaterial({
                color: 'white',
                shading: THREE.SmoothShading // <-----------  THIS IS THE PROBLEM
            });
        }
    });
    man.position.y = -10;
    scene.add(man);
});
var-loader=new-THREE.OBJLoader(管理器);
loader.load('/manmodel/js/man.obj',函数(对象、材质){
console.log(对象);
控制台.日志(材料);
人=物;
人工导线(功能(子项){
if(三个.Mesh的子实例){
child.geometry.computeFaceNormals();
child.geometry.computeVertexNormals(真);
child.material=新的三点材质({
颜色:'白色',

shading:THREE.SmoothShading/出于性能原因,最新版本的ObjLoader将.obj解析为缓冲几何体。如果回顾GitHub上的历史记录,可以找到解析为几何体的早期版本:


用这个加载你的.obj,然后你可以操纵几何体,直到你得到你需要的几何体,然后创建一个新的BufferGeometry,并使用BufferGeometry.fromGeometry(几何体)将几何体加载到其中,以获得性能。我已经很好地完成了这项工作。

如果我们想使用最新的加载程序(r73),我们还可以将
缓冲几何体
转换为
几何体
,然后再转换回来

唯一需要注意的是,我必须在计算顶点法线之前合并顶点。我猜从缓冲区转换会弄乱三角形,所以我们必须先合并它们

 var geometry = new THREE.Geometry().fromBufferGeometry( child.geometry );
 geometry.computeFaceNormals();
 geometry.mergeVertices();
 geometry.computeVertexNormals();
 child.geometry = new THREE.BufferGeometry().fromGeometry( geometry );