关于html5:三维引擎导入obj模型全黑总结

8次阅读

共计 924 个字符,预计需要花费 3 分钟才能阅读完成。

最近有客户试用咱们的三维平台,在导入模型的时候,会呈现模型全黑和不可见的状况。本文说下全黑的状况。

通过测试,发现可能有如下几种状况。

obj 模型没有法线向量

如果 obj 模型导出的时候没有导出法线向量,会导致模型不能承受光照,从而导出的模型是全黑的。此种状况下,高光反射也没有。

解决方案上,一种是让建模人员从新导出模型,导出的时候勾选上导出法线向量。

另外也能够从程序上兼容一下,判断模型是否有法线向量,如果没有,程序本人计算法线向量。
以 threejs 为例,调用 computeVertexNormals 计算法线向量代码如下:

 if(child.geometry && !child.geometry.hasAttribute('normal')) {child.geometry.computeVertexNormals();
  }

PS: 如何判断模型是否有法线向量,只须要用文本编辑器关上 *.obj 文件,查看是否有“vn”标记

mtl 文件中设置模型色彩为彩色

一些建模人员在导出 mtl 文件时候,参数 Kd 是 0 0 0,Kd 参数会被解析成模型材质的 color 属性,既色彩。
此种状况下,尽管模型是全黑,然而高光的色彩是有的,也就是在特定的角度能够看到高光:

所以解决的 方法就是把 Kd 0 0 0 的设置全副去掉,或者建模师能够从新导出模型文件,让 Kd 变成一个非全 0 的值。

mtl 也是文本文件,间接用文本编辑器能够关上查看:

PS mtl 中 Kd 代表漫反射的色彩,Ks 代表高光反射的色彩。

mtl 文件中贴图援用了本地门路

有时候建模人员在导出 mtl 文件的时候,外面的贴图门路是本地的绝对路径,如下图所示:

此时导入的模型因为找不到贴图,而变成了彩色。此种状况下,尽管模型是全黑,然而高光的色彩是有的,也就是在特定的角度能够看到高光,同上。

解决办法就是把绝对路径改成相对路径,如下图:

能够手动编辑 mtl 文件批改,也能够建模人员导出的时候设置。

导入的场景没有设置灯光

还有一种状况,模型都没有问题,然而因为场景没有设置任何灯光,导致模型看不见,此种状况须要程序上增加灯光即可。

结语

上一张批改后的效果图

如果对可视化感兴趣,能够和我交换,微信 541002349。关注公号“ITMan 彪叔”能够及时收到更多有价值的文章。

正文完
 0