我想确定为什么我无法平滑加载OBJLoader的阴影几何。THREE.js OBJLoader - 加载到几何,操作,然后保存到BufferGeometry
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);
});
这是结果:
如果删除了线computeFaceNormals()的模型呈现相同的。 如果我移除了computeVertexNormals(true),那么该对象不会渲染(黑色) - 所以我知道这是在做一些事情。
如果我在此代码中更改MeshPhongMaterial的颜色属性,颜色会发生变化,所以我也知道这是行得通的。
我试图使用顶点和普通帮助程序来确定问题是什么,但它们失败,因为使用BufferGeometry时,面和顶点不会以数组形式存储。
我也尝试修改man.obj文件以将's'值从'off'更改为1.这没有做任何事。
由于我将为Blender中生成的不同人物形象加载几个.obj文件,每个文件当前都在2MB左右,所以我更喜欢在浏览器上进行阴影处理,而不是将文件“烘烤”到文件中增加文件大小。
问题:我在这里错过了什么? OR, 有没有办法将.obj文件加载为标准Geometry,计算法线,应用阴影,然后保存为BufferGeometry?
ps。我可能还需要光线追踪的法线。