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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
Three.js自定义objLoader几何体照明_Three.js - Fatal编程技术网

Three.js自定义objLoader几何体照明

Three.js自定义objLoader几何体照明,three.js,Three.js,我用THREE.objLoader加载这个对象,然后用它创建一个网格,如下所示: mesh=new THREE.SceneUtils.createMultiMaterialObject( 几何学 [ 新的3.MeshBasicMaterial({color:0xFEC1EA}), 新的三网格基本材料({ 颜色:0x9999, 线框:对, 透明:是的, 不透明度:0.85 }) ] ); 在我的场景中,我添加了一个方向光,它可以工作,我可以看到我的对象,但是它就像方向光是环境光一样。没有一张脸会

我用THREE.objLoader加载这个对象,然后用它创建一个网格,如下所示:

mesh=new THREE.SceneUtils.createMultiMaterialObject(
几何学
[
新的3.MeshBasicMaterial({color:0xFEC1EA}),
新的三网格基本材料({
颜色:0x9999,
线框:对,
透明:是的,
不透明度:0.85
})
]
);
在我的场景中,我添加了一个方向光,它可以工作,我可以看到我的对象,但是它就像方向光是环境光一样。没有一张脸会变得更黑或更亮

对象将填充颜色,但不会对其应用照明。 如果有人能帮我,我将不胜感激:)

我会错过什么


jshiddle here:

您必须使用网格材质。计算碎片颜色时,MeshBasicMaterial不考虑光线

但是,使用MeshPhongMaterial时,网格将变为黑色。我从未使用过OBJ加载程序,但您确定您的模型法线是正确的吗


顺便说一句:你可能想用点光源来代替。它的位置可能应该设置为摄像机位置(
light.position=camera.position
应该可以,因为当摄像机位置被控件编辑时,它将允许灯光移动)。

好的,伙计们,多亏了Maël Nison和doob先生,我能够理解我遗漏的几件事,我是一个完全的3d noob。。。我相信开始进入3d的人们可能会发现一些有用的总结:

基本3d概念
  • 三维由一些点(顶点)和一个称为法线的向量组成,表示面的方向(哪一侧是正面,哪一侧是背面)

  • 没有法线可能非常糟糕,因为默认情况下仅在正面应用照明。因此,在尝试应用LambertMaterial或PhongMaterial时,会出现黑色模型

  • OBJ文件是描述3D信息的一种方式。想了解更多信息吗?阅读此外,还提供了一个立方体示例,可用于测试

3.js提示和技巧
  • 当法线不存在时,无法应用照明,因此黑色模型渲染。Three.js实际上可以使用geometry.computeVertexNormals()和/或geometry.computeFaceNormals()计算顶点和面法线,具体取决于缺少的内容

  • 这样做时,Three.js的法线计算可能会出错,法线会翻转,要解决此问题,只需在几何体的faces数组中循环,如下所示:

/*计算法线*/
geometry.computeFaceNormals();
geometry.computeVertexNormals();
/*接下来的3行似乎不是强制性的*/
mesh.geometry.dynamic=true
网格.geometry.\uuuu dirtyVertices=true;
网格。几何体。uu dirtyNormals=true;
mesh.flipside=true;
mesh.doubleside=true;
/*翻转法线*/

对于(var i=0;iMany多亏了您,我将检查生成的对象上的法线是否正常。您的几何体没有法线。您需要执行
geometry.computeFaceNormals()
geometry.computeVertexNormals()
。除此之外,在尝试
MeshPhongMaterial
之前,我会选择
MeshLambertMaterial
。嘿,Doob先生!总是站起来嗅嗅你的宝宝发生了什么:)竖起大拇指接受建议。完成后将进行编辑