Qt实现读取显示obj文件——说明


年后回来一个多月基本上都在研究OpenGL的东西~由于C++,Qt和三维的基础基本都是0,所以有些吃力,好在在动手写代码将近20天之后总算做出了一点成绩~


环境

Qt 5.5 +AddIn+VS2013,qt相关下载戳这里,VS2010也可以,不过写c++感觉2013之后好用一些~OpenGL我直接用的系统里面的glu32和opengl32(不懂如何在c++中引用的可以自己稍微花点时间研究一下~搞c++还是很要耐心的~)。


OBJ格式

由于obj格式虽然基本相同,但是还是有些大同小异的地方,我在参考了glm.c的源码和我需要读取的obj格式之后写出的代码~

这是我的OBJ文件的格式,v/vt/vn部分都是一样的,不懂我在说啥的可以查一下OBJ格式说明,网上很多:

g 1
usemtl 026
f 6/1/1 5/2/1 7/3/1 8/4/1
usemtl 027
f 4/5/2 3/6/2 5/7/2 6/8/2
usemtl 028
f 3/9/3 2/10/3 7/11/3 5/12/3
usemtl 029
f 2/13/4 1/14/4 8/15/4 7/16/4
usemtl 030
f 1/17/5 4/18/5 6/19/5 8/20/5


我的纹理.mtl文件格式是这样的:

newmtl 001
Ka 1.000 1.000 1.000
Kd 1.000 1.000 1.000
map_Kd Image\001.png

我们可以根据自己的文件格式不同原创代码,在Qt中封装了很多很好用的对象~


步骤

  1. 读取数据模型
  2. 创建并绑定纹理
  3. 建立面的法向量
  4. 将数据归一化显示在屏幕中间
  5. 绘制三维数据

主要的实现过程是这样,当然显示中还需要光照来配合法向量形成三维的效果和阴影!

你可能感兴趣的:(opengl,QT,c++)