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

经过测试,发现可能有如下几种情况。

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彪叔” 可以及时收到更多有价值的文章。

三维引擎导入obj模型全黑总结的更多相关文章

  1. 三维引擎导入obj模型不可见总结

    最近有客户试用我们的三维平台,在导入模型的时候,会出现模型全黑和不可见的情况.上一篇文章说了全黑的情况.此文说下不可见的情况. 经过测试,发现可能有如下两种情况. 导入的模型不在镜头视野内 导入的模型 ...

  2. opengl导入obj模型

    在经过查阅各种资料以及各种bug之后,终于成功的实现了导入基本的obj模型. 首相介绍一下什么是obj模型 一.什么是OBJ模型 obj文件实际上是一个文本文档,主要有以下数据,一般可以通过blend ...

  3. 游戏开发之UDK引擎介绍和模型导入

    2014-09-18 10:01:3 3.7.5" style="border:0px; vertical-align:middle; max-width:100%"&g ...

  4. bullet物理引擎与OpenGL结合 导入3D模型进行碰撞检测 以及画三角网格的坑

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11681069.html 一.初始化世界以及模型 /// 冲突配置包含内存的默认设置,冲突设置. ...

  5. iNeuOS工业互联网操作系统,三维(3D)模型在线编辑应用和实时数据统计(和值、均值、众数、方差、中位数等)

    目       录 1.      概述... 1 2.      三维(3D)模型在线编辑与应用... 2 3.      实时数据统计... 4 1.   概述 此次,iNeuOS工业互联网操作系 ...

  6. three.js加载obj模型

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  7. OpenGL OBJ模型加载.

    在我们前面绘制一个屋,我们可以看到,需要每个立方体一个一个的自己来推并且还要处理位置信息.代码量大并且要时间.现在我们通过加载模型文件的方法来生成模型文件,比较流行的3D模型文件有OBJ,FBX,da ...

  8. WPF利用HelixToolKit后台导入3D模型

    原文:WPF利用HelixToolKit后台导入3D模型 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/de ...

  9. WEB 三维引擎在高精地图数据生产的探索和实践

    1. 前言 高精地图(High Definition Map)作为自动驾驶安全性不可或缺的一部分,能有效强化自动驾驶的感知能力和决策能力,提升自动驾驶的等级.对于自动驾驶来说,高精地图主要是给机器用的 ...

随机推荐

  1. C++类的静态成员变量与静态成员函数

    1.类的静态成员变量 C++类的静态成员变量主要有以下特性: 1.静态成员变量需要类内定义,类外初始化 2.静态成员变量不依赖于类,静态成员变量属于全局区,不属于类的空间. 3.静态成员变量通过类名访 ...

  2. 攻防环境配置大全(iss/apache/nginx/tomcat/jboss/weblogic)

    一.IIS/apache/nginx/tomcat 介绍 1.asp aspx 只能在微软系统的iis中间件运行 [asp+IIS+access(扩展名为mdb)].aspx+mssql+iis结合, ...

  3. ORA-01756: quoted string not properly terminated

    导入sql文件报错:ORA-01756: quoted string not properly terminated 字符集的中英文问题: 临时解决方法:export NLS_LANG=AMERICA ...

  4. zabbix 报警发送企业威信

    1.组册企业微信,创建应用 2.下载脚本文件: https://raw.githubusercontent.com/OneOaaS/weixin-alert/master/weixin_linux_a ...

  5. Can't open PID file /run/zabbix/zabbix_agentd.pid

    神奇的事情,重启主机(reboot)后查看状态是正常的没有报错,重启zabbix-agent后,报无法打开zabbix_agentd.pid,zabbix-web正常监控 1.首先,/etc/zabb ...

  6. Linux 服务器的基本性能及测试方法

    1. 摘要 一个基于 Linux 操作系统的服务器运行的同时,也会表征出各种各样参数信息.通常来说运维人员.系统管理员会对这些数据会极为敏感,但是这些参数对于开发者来说也十分重要,尤其当程序非正常工作 ...

  7. Maven settings配置阿里镜像

    一般只用配置三个地方 maven仓库路径 镜像 默认JDK版本 <?xml version="1.0" encoding="UTF-8"?> < ...

  8. uni-app APP端隐藏导航栏自定义按钮

    话不多说,上代码 // #ifdef APP-PLUS var webView = this.$mp.page.$getAppWebview(); // 修改buttons webView.setTi ...

  9. MySQL统计总数就用count(*),别花里胡哨的《死磕MySQL系列 十》

    有一个问题是这样的统计数据总数用count(*).count(主键ID).count(字段).count(1)那个效率高. 先说结论,不用那么花里胡哨遇到统计总数全部使用count(*). 但是有很多 ...

  10. Python 常见运算符表达式

    常见运算符表达式    1.算数运算符    2.逻辑运算符    3.比较运算符    4.成员运算符    5.位运算符    6.身份运算符a.赋值运算符 =    格式:变量= 表达式     ...