三维引擎导入obj模型全黑总结
最近有客户试用我们的三维平台,在导入模型的时候,会出现模型全黑和不可见的情况。本文说下全黑的情况。
经过测试,发现可能有如下几种情况。
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彪叔” 可以及时收到更多有价值的文章。
相关文章
- vc60修改快捷键-如何解决Visual c++不能打开文件以及工程不能添加文件的问题
- c 线程安全的单例模式-设计模式之单例模式(C++版)
- c 线程安全的单例模式-C++单例模式(线程安全、内存释放)
- 嵌入式:ARM相关开发工具概述
- 嵌入式:ARM符号定义伪操作详解
- c 线程安全的单例模式-详解C++实现线程安全的单例模式
- C++ OpenCV手动截取图像做透视变换
- 超简单的pyTorch训练->onnx模型->C++ OpenCV DNN推理(附源码地址)
- pyTorch入门(三)——GoogleNet和ResNet训练
- pyTorch入门(四)——导出Minist模型,C++ OpenCV DNN进行识别
- Github Actions Hexo 自动部署
- c 线程安全的单例模式-std string与线程安全_这才是现代C++单例模式简单又安全的实现
- 我是这么用 Google 的....
- 《HelloGitHub》第 13 期
- 《HelloGitHub》第 12 期
- [linux]为阿里云ECS(CentOS7)配置IPv6地址
- 《HelloGitHub月刊》第 11 期
- [linux]孤儿进程与僵尸进程
- 《HelloGitHub月刊》第 10 期
- [linux]ngrep命令、常见用法