【发布时间】:2014-12-23 18:49:47
【问题描述】:
我正在尝试确定为什么我无法平滑使用 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);
});
这是结果:
如果我删除 computeFaceNormals() 行,模型呈现相同。 如果我删除了 computeVertexNormals( true ) 对象渲染时没有照明(黑色) - 所以我知道这是在做某事。
如果我在这段代码中改变了MeshPhongMaterial的颜色属性,颜色就会改变,所以我也知道这是可行的。
我尝试使用顶点和法线助手来确定问题所在,但它们失败了,因为使用 BufferGeometry 时,面和顶点没有存储为数组。
我还尝试修改 man.obj 文件以将 's' 值从 'off' 更改为 1。这没有任何作用。
由于我将为不同的人物加载几个 .obj 文件,在 Blender 中生成,每个文件目前大约 2MB,我更喜欢在浏览器上进行着色而不是“烘焙”到文件中,如果这会增加的话文件大小。
问题:我在这里遗漏了什么吗?要么, 有没有办法将 .obj 文件加载为标准几何图形,计算法线,应用着色,然后保存为 BufferGeometry?
ps。我可能还需要法线来进一步进行光线追踪。
【问题讨论】:
标签: javascript three.js smoothing .obj