opengl 加载obj模型

本文介绍了如何在OpenGL环境中手动加载和渲染OBJ模型。通过理解OBJ文件格式,解析顶点、纹理坐标、法线等信息,并创建合适的数据结构来存储模型数据。同时,解释了如何处理材质库(MTL)文件,以及如何使用这些数据进行绘制。文章提供了一个逐步的过程,从数据解析到绘制,帮助读者实现自己的模型加载器。
摘要由CSDN通过智能技术生成

本章讲述使用opengl加载obj模型,如果你想自己实现, 你需要一个opengl的开发环境,以及相关的知识 ,最好是看完LearnOpenGL CN 的入门教程 

 

使用opengl开发的同学都需要加载模型,github上有很多的现成库,比较常用的是 Assimp 。这篇博客主要记录自己手动去加载模型的一个过程,首先建模软件有很多,模型的格式也不一样,像 fbx,obj,.blend等,这里加载的模型是obj格式的,可以从这里下载,不知道为什么csdn上传资源下载一定要积分.... ,有需要的可以私我发给你。

模型文件格式

一个使用Blender3DS Max或者Maya等建模软件制作出来的模型 一般由一个或者多个网格(Mesh)组成,在游戏中,我们的主角模型可以由头部 ,身体,四肢,武器等多个网格组成。我们在opengl去渲染一个模型 可以分别渲染模型的多个mesh ,那么渲染一个mesh通常都需要哪些属性呢? 首先顶点是必不可少的 ,可能还有纹理和 纹理坐标 ,法线,切线等,一个mesh就是由这些属性组成的 。之所以选择加载obj格式的模型 ,是因为我们可以直接看到obj模型的对应属性 ,模型文件可以在这里下载 ,model文件夹下是模型 script文件下是具体代码。下载解压完资源后我们可以直接将文件夹内 spongebob_bind.obj 的后缀改为txt ,使用文本工具打开 可以看到obj模型的数据组织格式 ,如下图所示 :

可以看到obj的数据格式是按照行来组织的 ,最明显的以 v 开头行,代表记录着一个顶点 ,将文本往下拉,可以看到还有以 vt 、vn 、f 、usemtl等字符开头的 ,以下常见的开头字符所代表的数据:

v   x y z    v :表示本行指定一个顶点,此关键字后跟着3个单精度浮点数,代表着该顶点坐标值 
vt  u v      vt:表示本行指定一个纹理坐标,此关键字后跟着2个单精度浮点数,代表着该纹理坐标UV值
vn  x y z    vn:表示本行指定一个法线向量,此关键字后跟着3个单精度浮点数,代表着该法向量坐标值
f   v/vt/vn v/vt/vn v/vt/vn  f:面 代表一个三角形(三个顶点),v/vt/vn 描述了一个顶点的基本数据,
                             顶点位置、纹理坐标和法线 。要注意的是这里存储的只是索引
g 3D_Object_4     g:表示一个名称为3D_Object_4的组,指定从此行开始到下一个g开头的所有对象为一组
o 3D_Object_4     o:指定一个名称为3D_Object_4的对象(也就是一个mesh)
mtllib spongebob_bind.mtl   mtllib:此关键字后为文件名称,指定了obj所使用的材质库文件名称 
usemtl spongebob            usemtl:此关键字后为材质名称,指定了从此行之后到下一个以usemtl开头的行之间的
                            所有表面所使用的材质名称,该材质可以在obj文件所附属的mtl文件中找到具体信息
 

我们需要看一下obj的数据组织格式,首先按数据类型(顶点,纹理坐标,法线各自放在一起)分类,放在文件的前面,然后以关键字 f 指定三角面的每个顶点的顶点坐标(v)、纹理坐标(vt)、法线向量(vn)的索引,这样就已经可以绘制一个mesh的形状了 。  另外需要说明的就是mtlib ,该关键字指定了一个关联的材质库文件,该文件后缀为mtl,一般来说与obj文件在同一目录,里面包含了obj模型使用到的材质列表,材质中存储着贴图、光照参数等属性 ,跟obj文件一样,我们可以通过将后缀改为txt,来查看mtl文件的内容 

数据格式也与obj一样按行组织,使用关键字符进行标识 ,下面是关键字符对应的具体含义


                
  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值