2017-07-28 64 views
1

我将我的搅拌机模型导出到OBJ并将其加载到Three.js。搅拌机出口到OBJ并加载Three.js,网格法线和面临错误

  • 对于车轮法线似乎是朝内。
  • 对于轨道,仅出现网格并且看起来没有正确映射。

我在混合器中重新导入了OBJ,它似乎正确显示,所以它似乎是Three.js中的问题。

Image in blender showing the normals of the wheels are correct, and the track appears correctly.

Codepen of the Three.js code, and OBJ model is here

var material = new THREE.MeshLambertMaterial({ color: 0xcc8729 }); 

//Loader for the model 
var loader = new THREE.OBJLoader(); 
var geometry = loader.parse(getObjFileAsString()); 
geometry.position.set(0, 0, 0); 
geometry.castShadow = true; 
geometry.receiveShadow = true; 
geometry.traverse(child => { 
    if (child instanceof THREE.Mesh) { 
    child.material = material; 
    } 
}); 
scene.add(geometry); 

我需要重塑车轮和轨道?或者有没有办法在Three.js中修复它?

+0

是你的车轮偶然负面的规模? 你能分享你的搅拌机文件吗? –

回答

0

问题是为什么导出到obj翻转脸部法线?

我唯一的猜测是你的对象有一个负值。因此您必须应用比例和旋转shift-a快捷方式。那么你应该仔细检查你的法线是否仍然朝外。看到我的回答here

在Three.js中,您还可以通过玩material.side值 来解决翻转的法线,这里有双面,背面和正面。 source

node.material.side = THREE.DoubleSide; 
+0

不知何故,即使当我创建新的气瓶时,它也有同样的问题。显然,只有当我将“Cap填充类型”从“Ngon”更改为“Triangle Fan”时,它才能正确导出到OBJ。 解决了我的问题。 对于曲目,我仍然是上面的问题。 我通过创建一个圆柱体来模拟轨道,去除盖面,然后挤出外表面。 什么是最好的方式来建模,并将其正确导出? –