读取obj+mtl 文件 (OpenGL C++)
本学期我们开设了计算机图形学的课,最后的大作业老师要求做一个场景,为了使做出的场景更美观,写了这个读取obj文件的程序,从CG模型网上下载了一些模型并加载,如图所示,大部分的模型都能够加载成功,由于我只写了加载jpg类型图片的代码,要是需要加载其他类型图片,则需要增添一些代码。
对于mtl以及obj文件的格式在这里就不细说了,网上也有更详细的,这里主要说一下我读取文件的基本思路。
mtl文件的读取,我们首先要做的就是分割每个数据,如下图 我们需要按行分割,以及将每一行中的数据按空格切分。相当于分割字符串。map_Ka 表示引用图片。因此当读取到map_Ka 这个字符串时,要把下一个字符串设为读取纹理的地址。
map_Ka ggtt_jiaoliang_002.jpg
newmtl Material__58Ns 10.0000Ni 1.5000d 1.0000Tr 0.0000Tf 1.0000 1.0000 1.0000 illum 2Ka 0.5880 0.5880 0.5880Kd 0.5880 0.5880 0.5880Ks 0.0000 0.0000 0.0000Ke 0.0000 0.0000 0.0000map_Ka ggtt_jiaoliang_002.jpgmap_Kd ggtt_jiaoliang_002.jpg
其它的 例如Ka Kd等表示的都是材质光照之类的,有对应的opengl函数可以设置。如下:为一个例子
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, m_mtls[i]->Ka);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, m_mtls[i]->Kd);
在读取obj文件中,除了要分割空格,还要分割 "/" ,当读取的第一个数据内容为f时,就需要分割“/”
f 1/1/1 2/2/1 3/3/1 4/4/1
f 1/1/2 5/5/2 6/6/2 2/2/2
f 7/7/3 8/8/3 2/2/3 6/6/3
分割后,再进行存储数据。
在obj中,三个顶点构成的面与四个顶点构成的面,我都用了三角面片来表示。具体的看注释。
先写到这儿~有时间再继续写
读取obj+mtl 文件 (OpenGL C++)相关推荐
- IIS发布3D可视化.obj/.mtl文件找不到问题解决方案
IIS发布3D可视化.obj/.mtl文件找不到问题解决方案 因为演示需要,我就在服务器上发布了一个3d模型,通过一个网页去展示,但是总出现个别文件找不到或者渲染不出来的问题,在服务器上打开文件的路劲 ...
- three.js 笔记 --- 渲染图片 和 渲染obj,mtl文件
渲染图片 let textureLoader = new THREE.TextureLoader();let textureLoaderRes = function (url) {return tex ...
- 网页导入3D模型-obj/mtl文件
具体代码如下 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF ...
- threejs+vue房子模型,实现BSP模型剪切,导入obj+mtl文件
threejs版本选择 "dependencies": {"@types/three": "^0.126.1", "three&q ...
- three.js使用obj + mtl文件加载材质问题
在加载成功后显示黑色或者白色模块时时材质加载失败,但是mtl文件是加载了的,问题在于路径不匹配,需要修改mtl文件里面的路径. 贴图 模块加载 修改mtl文件路径过后
- 使用three.js加载obj+mtl文件
因在项目中运用到WEBGL的技术.所以研究了一下下.three.js库看来十分强大,此处为加载带材质的obj文件 1.下载相关js https://threejs.org/ thee.j ...
- vs2019 加载.obj文件报错找不到403 IIS 3D可视化.obj/.mtl文件找不到
由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序. 解释的明明白白,iis缺少MIME的文件映射. 所以根据缺少的文件后缀,添加对应的MIME. 在vs2019的Web.con ...
- 3dsmax 模型创建+原生贴图+obj/mtl+three.js 实现WEB3D
3dsmax模型创建+原生贴图 模型创建请参考另一篇我的文章 3dsmax 模型创建+原生贴图(多图) 为何要原生贴图? 因为three.js只支持原生贴图的obj/mtl文件 obj/mtl导出 T ...
- 读取DXF格式文件 (转)
读取DXF格式文件 (转)[@more@] 读取DXF格式文件 OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高 ...
最新文章
- 漫画:什么是快速排序?(完整版)
- 剑桥大学国际学生事务部网站
- Go websocket
- python高级特性:迭代器与生成器
- 《小学生C++趣味编程》第42课 最小公倍数
- 教你买虚拟主机不会受骗的九个方法
- 论无线网络中的网络与信息安全技术
- ajax传递复选框的参数,ajax将table复选框的数组值传递到后台
- 001Linux课程内容
- python之判断一个值是不是可以被调用
- mbedtls交换服务器证书,mbedtls | 07 - DH秘钥协商算法的配置与使用
- python程序memory error_科学网—[转载]解决Python memory error的问题(四种解决方案) - 高琳琳的博文...
- 读书笔记:《你拿什么定义自己》
- TP6自定义分页样式
- zblog php getlist,zblog函数:GetArticleList()
- 纵轴上每个单位长度表示什么_6.5 坐标轴:1是几?坐标轴上的单位长度的相对大小(拗口)...
- 计算机在维氏硬度的应用,华银显微维氏硬度计HVS-1000A使用方法
- MFC中的CDC 绘图
- jdk源码写过注释后debug提示source code does not match the bytecode
- 成都加米谷大数据教育:数据库设计中的 9 大常见错误
热门文章
- ToggleButtonBar的使用
- 调试 debugging
- mysql删除重复记录语句的方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-06-21 我要评论 查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的。 . .
- 【高效办公】OS模块对文件夹所有文件重命名
- eclipse输出中文变成乱码问题
- 《计算机科学概论(第12版)》—第1章1.10节通信差错
- 应急照明市电检测_应急照明接线方式,这几点你必须知道!
- LUN与LVM的关系
- Python 猴子选大王(约瑟夫环)算法
- CAD二次开发:用C#在AutoCAD中插入栅格图像