在ThreeJS中加载* .obj文件的模型的错误阴影

时间:2014-10-15 13:16:09

标签: javascript three.js

当我加载目标文件Wavefront obj file时,未正确计算法线,因此模型的阴影是错误的。我加载* .obj模型的代码是从loader / obj示例的原始项目修改的,从下面可以看出我在将模型添加到场景之前缩放模型,通常在那些类型的转换之后必须调用{ {1}},dirtyDisplayListUpdateModel - 类似于强制模型反映对模型所做的当前更改的函数。在threejs中,最可能的函数是RecalculateNormalsgeometry.computeFaceNormals();

但在我的情况下,如果我调用geometry.computeVertexNormals( true );geometry.computeFaceNormals();,那么模型完全消失,控制台报告:TypeError:geometry.computeFaceNormals不是函数OBJ_Loader.html:102

我在这里做错了什么?

geometry.computeVertexNormals( true );

1 个答案:

答案 0 :(得分:1)

刚才有人问过,但我现在会尝试回答。

回调函数采用具有属性几何的参数Object3D。 最重要的是,对象可能包含多个孩子。 您可以使用遍历函数来获取每个子项并在那里修改几何。 所以你的函数函数(几何){...}可能如下所示:

function(object){
    object.traverse( function ( child ) {
        if ( child instanceof THREE.Mesh ) {
            child.geometry.scale.set(10, 10, 10);
            child.geometry.rotation.x = 3.1415/2;
            child.geometry.position.z =-0;
            child.geometry.position.x =0;
            child.geometry.position.y =0;
            child.geometry.computeFaceNormals();
            child.geometry.computeVertexNormals( true );
            scene.add( child );
        }
    }
}