本学期我们开设了计算机图形学的课,最后的大作业老师要求做一个场景,为了使做出的场景更美观,写了这个读取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++)相关推荐

  1. IIS发布3D可视化.obj/.mtl文件找不到问题解决方案

    IIS发布3D可视化.obj/.mtl文件找不到问题解决方案 因为演示需要,我就在服务器上发布了一个3d模型,通过一个网页去展示,但是总出现个别文件找不到或者渲染不出来的问题,在服务器上打开文件的路劲 ...

  2. three.js 笔记 --- 渲染图片 和 渲染obj,mtl文件

    渲染图片 let textureLoader = new THREE.TextureLoader();let textureLoaderRes = function (url) {return tex ...

  3. 网页导入3D模型-obj/mtl文件

    具体代码如下 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF ...

  4. threejs+vue房子模型,实现BSP模型剪切,导入obj+mtl文件

    threejs版本选择 "dependencies": {"@types/three": "^0.126.1", "three&q ...

  5. three.js使用obj + mtl文件加载材质问题

    在加载成功后显示黑色或者白色模块时时材质加载失败,但是mtl文件是加载了的,问题在于路径不匹配,需要修改mtl文件里面的路径. 贴图 模块加载 修改mtl文件路径过后

  6. 使用three.js加载obj+mtl文件

    因在项目中运用到WEBGL的技术.所以研究了一下下.three.js库看来十分强大,此处为加载带材质的obj文件 1.下载相关js    https://threejs.org/     thee.j ...

  7. vs2019 加载.obj文件报错找不到403 IIS 3D可视化.obj/.mtl文件找不到

    由于扩展配置问题而无法提供您请求的页面.如果该页面是脚本,请添加处理程序. 解释的明明白白,iis缺少MIME的文件映射. 所以根据缺少的文件后缀,添加对应的MIME. 在vs2019的Web.con ...

  8. 3dsmax 模型创建+原生贴图+obj/mtl+three.js 实现WEB3D

    3dsmax模型创建+原生贴图 模型创建请参考另一篇我的文章 3dsmax 模型创建+原生贴图(多图) 为何要原生贴图? 因为three.js只支持原生贴图的obj/mtl文件 obj/mtl导出 T ...

  9. 读取DXF格式文件 (转)

    读取DXF格式文件 (转)[@more@] 读取DXF格式文件 OpenGL是美国SGI公司最新推出的一套开放式的三维图形软件接口,适用于广泛的计算机环境,从个人计算机到工作站,OpenGL都能实现高 ...

最新文章

  1. 漫画:什么是快速排序?(完整版)
  2. 剑桥大学国际学生事务部网站
  3. Go websocket
  4. python高级特性:迭代器与生成器
  5. 《小学生C++趣味编程》第42课 最小公倍数
  6. 教你买虚拟主机不会受骗的九个方法
  7. 论无线网络中的网络与信息安全技术
  8. ajax传递复选框的参数,ajax将table复选框的数组值传递到后台
  9. 001Linux课程内容
  10. python之判断一个值是不是可以被调用
  11. mbedtls交换服务器证书,mbedtls | 07 - DH秘钥协商算法的配置与使用
  12. python程序memory error_科学网—[转载]解决Python memory error的问题(四种解决方案) - 高琳琳的博文...
  13. 读书笔记:《你拿什么定义自己》
  14. TP6自定义分页样式
  15. zblog php getlist,zblog函数:GetArticleList()
  16. 纵轴上每个单位长度表示什么_6.5 坐标轴:1是几?坐标轴上的单位长度的相对大小(拗口)...
  17. 计算机在维氏硬度的应用,华银显微维氏硬度计HVS-1000A使用方法
  18. MFC中的CDC 绘图
  19. jdk源码写过注释后debug提示source code does not match the bytecode
  20. 成都加米谷大数据教育:数据库设计中的 9 大常见错误

热门文章

  1. ToggleButtonBar的使用
  2. 调试 debugging
  3. mysql删除重复记录语句的方法 作者: 字体:[增加 减小] 类型:转载 时间:2010-06-21 我要评论 查询及删除重复记录的SQL语句,虽然有点乱,但内容还是不错的。 . .
  4. 【高效办公】OS模块对文件夹所有文件重命名
  5. eclipse输出中文变成乱码问题
  6. 《计算机科学概论(第12版)》—第1章1.10节通信差错
  7. 应急照明市电检测_应急照明接线方式,这几点你必须知道!
  8. LUN与LVM的关系
  9. Python 猴子选大王(约瑟夫环)算法
  10. CAD二次开发:用C#在AutoCAD中插入栅格图像