opengl读取obj模型并绘制

本文介绍如何在OpenGL中加载和绘制.obj模型,通过3dsmax创建模型并导出,解析模型文件中的点、面、法线和纹理坐标信息,并展示基本的模型读取与绘制过程。
摘要由CSDN通过智能技术生成

要完成图形学课程的大作业,用传统的手动写点,线,面等其他数据的方式太繁琐,工程量太大,且效果不好。故而使用3dsmax建模,然后导出obj模型,读取模型进行绘制即可。

要读取obj模型,首先要知道obj模型的内容,即点,面,法线,纹理坐标等。

用记事本打开obj文件,即可查看obj的内容。

其中#为注释部分

先读取一个最简单的obj模型

v 就是点的位置信息(3f   x,y,z)

vn 就是点的法线信息(3f  x,y,z)

vt 是点的纹理坐标(3f  u,v,w),一般只用uv坐标即可

f 即面的信息  

面最基本的形式就是   f 1/1/1 2/2/2 3/3/3,其中每个分块就是一个点的信息(三角面片构成面,所以是三个分块),每个点的信息都由 顶点位置索引/纹理坐标索引/法线索引构成(索引从1开始,用c++读取的时候要注意 -1)。

面的信息有多种形式,这里只讨论这一种,其他形式各位自己去实现就ok

下面就是读取obj文件了,先进行准备工作

struct Float3       //点的位置信息和法线信息的数据类型
{
	float Data[3];     //x,y,z
};

struct Float2      //点的纹理坐标数据类型
{
	float Data[2];   //u,v
};

struct Face          //面信息
{
	int vertex[3][3];       //三个点构成一个面  每个点有三个索引信息
};

unsigned char*LoadFileContent(const char*path, int &filesize)   //该函数来自于萌谷教程
//读取文件,返回文件内容,把文件大小赋值给filesize       
{
	unsigned char*fileContent = nullptr;
	filesize = 0;
	FILE*pFile = fopen(path, "rb");   //二进制方式读取
	if (pFile)
	{
		fseek(pFile, 0, SEEK_END);      //将文件指针移动到文件末尾
		int nLen = ftell(pFil
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值