图形学基础 | 实现OBJ文件的载入

在做一个软光栅化渲染器.
增加对复杂模型的支持.
选择对OBJ文件进行支持.

OBJ文件格式介绍

文件格式的介绍可以参考前一篇文章
图形学基础 | 详解3D中的obj文件格式

OBJ文件载入

这里找了一个开源的OBJ文件解析的库 tinyobjloader.
只有一个头文件 tiny_obj_loader.h
主要的使用方法可以参考Github上的 loader_example.cc Demo.

1. tiny_obj_loader.h 的使用

include这个头文件需要先定义一个宏

#define TINYOBJLOADER_IMPLEMENTATION
#include "tiny_obj_loader.h"

2. tiny_obj_loader.h 中数据结构的介绍

2.1 attrib_t
// Vertex attributes
typedef struct {
  std::vector<real_t> vertices;   // 'v'
  std::vector<real_t> normals;    // 'vn'
  std::vector<real_t> texcoords;  // 'vt'
  std::vector<real_t> colors;     // extension: vertex colors
} attrib_t;

attrib_t 主要存放的就是 OBJ文件中所有的顶点数据信息. 比如:

  • vertices : 顶点位置信息
  • normals : 法线信息
  • texcoords : 纹理坐标信息
  • colors : 颜色信息
2.2 shape_t
typedef struct {
  std::string name;
  mesh_t mesh;
  path_t path;
} shape_t;

shape_t 表示的是比如这个物体的一个部分.
在 OBJ文件中, 如 o xxx 表示一个部分的开始.主要存储的信息有:

  • name : 这部分的名称 xxx
  • mesh : 构成这个部分的顶点信息. 这里通过使用索引的方式来记录 . 因为所有的数据信息都放在了 attrib_t 中.
  • path : pairs of indices for lines 按注释的意思是 线段的索引. 可能有问题. 因为没有用到这个.

在这里重点在于 mesh_t 这个数据结构:

// Index struct to support different indices for vtx/normal/texcoord.
// -1 means no
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值