Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 混合器导出到OBJ并加载到Three.js中,网格法线和面错误_Javascript_Three.js_Blender - Fatal编程技术网

Javascript 混合器导出到OBJ并加载到Three.js中,网格法线和面错误

Javascript 混合器导出到OBJ并加载到Three.js中,网格法线和面错误,javascript,three.js,blender,Javascript,Three.js,Blender,我将我的搅拌机模型导出到OBJ,并将其加载到Three.js 对于车轮,法线似乎向内 对于轨迹,仅显示网格,并且未正确映射 我在blender中重新导入了OBJ,它似乎显示正确,因此在Three.js中似乎是个问题 我需要改造车轮和轨道吗?或者有没有办法在Three.js中修复它?问题是为什么导出到obj会翻转面法线 我唯一的猜测是你的物体上有一个负比例。因此,您必须应用缩放和旋转shift-a快捷方式。然后你应该仔细检查你的法线是否仍然朝外。看看我的答案 在Three.js中,您还可以

我将我的搅拌机模型导出到OBJ,并将其加载到Three.js

  • 对于车轮,法线似乎向内
  • 对于轨迹,仅显示网格,并且未正确映射
我在blender中重新导入了OBJ,它似乎显示正确,因此在Three.js中似乎是个问题


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

问题是为什么导出到obj会翻转面法线

我唯一的猜测是你的物体上有一个负比例。因此,您必须应用缩放和旋转
shift-a
快捷方式。然后你应该仔细检查你的法线是否仍然朝外。看看我的答案

在Three.js中,您还可以通过使用
material.side
值来解算翻转的法线 有双面,背面和正面


你的轮子的刻度是否为负值?你能分享你的搅拌机文件吗?不知何故,即使我创建了新的圆筒,它也有同样的问题。显然,只有当我将“Cap Fill Type”从“Ngon”更改为“Triangle Fan”时,它才正确地导出到OBJ。这解决了我的汽缸问题。对于轨道,我仍然需要解决上述问题。我通过创建一个圆柱体,移除盖面来模拟轨迹。。然后挤出外表面。对其进行建模并正确导出的最佳方法是什么?
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);
node.material.side = THREE.DoubleSide;