OpenGL实战教程(13) -- 第十二站:利用Assmip库加载OBJ模型

1、Obj模型数据格式

obj模型文件是文本文件,主要由以下几部分组成:

;模型用贴图的描述文件,mtl文件描述贴图文件的信息,包括文件名等
mtllib xxx.mtl

;顶点坐标数据
v 1.000000 -1.000000 -1.000000
v 1.000000 -1.000000 1.000000
v -1.000000 -1.000000 1.000000

;纹理坐标的定义
vt 0.748573 0.750412
vt 0.749279 0.501284
vt 0.999110 0.501077

;顶点的法向量
vn 0.000000 0.000000 -1.000000
vn -1.000000 -0.000000 -0.000000
vn -0.000000 -0.000000 1.000000

; 面数据:面使用1/2/8这样格式,表示顶点位置/纹理坐标/法向量的索引,这里索引的是前面用v,vt,vn定义的数据 注意这里Obj的索引是从1开始的,而不是0
f 5/1/1 1/2/1 4/3/1
f 5/1/1 4/3/1 8/4/1
f 3/5/2 7/6/2 8/7/2

2、源码演示


#include "Model.h"
Model ourModel("model/nanosuit.obj");
GLint Step12_xAngle = 0;
GLint Step12_yAngle = 0;
GLint Step12_zAngle = 0;
GLint Step12_fScale = 90;
GLint Step12_lid = 0;

GLfloat Step12_noLight[4] = { 0.0f, 0.0f, 0.0f, 1.0f };
GLfloat Step12_ambientLight[4] = { 0.3f, 0.3f, 0.3f, 1.0f };
GLfloat Step12_diffuseLight[4] = { 0.7f, 0.7f, 0.7f, 1.0f };
GLfloat Step12_brightLight[4] = { 1.0f, 0.5f, 0.5f, 1.0f };
GLfloat Step12_lightPos[] = { 5.0f, 5.0f, 5.0f, 1.0f };//光的位置在右上角

void Step12_Display()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清除屏幕及深度缓存
	glClearColor(0, 0, 0, 0);

	glLoadIdentity(); // 重置模型观察矩阵

	glEnable(GL_DEPTH_TEST);
	glEnable(GL_COLOR_MATERIAL);
	glShadeModel(GL_SMOOTH);


	//开启颜色追踪
	glEnable(GL_COLOR_MATERIAL);
	glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);


	//设置光照环境
	glEnable(GL_LIGHTING);
	glEnable(GL_LIGHT0);
	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, Step12_noLight);
	glLightfv(GL_LIGHT0, GL_AMBIENT, Step12_ambientLight);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, Step12_diffuseLight);
	glLightfv(GL_LIGHT0, GL_SPECULAR, Step12_brightLight);
	glLightfv(GL_LIGHT0, GL_POSITION, Step12_lightPos);

	glRotatef(Step12_xAngle, 1.0, 0.0, 0.0);
	glRotatef(Step12_yAngle, 0.0, 1.0, 0.0);
	glRotatef(Step12_zAngle, 0.0, 0.0, 1.0);
	glScalef(0.5, 0.5, 0.5);
	glColor3f(1, 1, 0.6);

	ourModel.Draw();

	glutSwapBuffers();
}

运行结果演示:

在这里插入图片描述
在这里插入图片描述

3、下载工程项目文件

在Debug x86下载编译成功。

下载源文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值