年后回来一个多月基本上都在研究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中封装了很多很好用的对象~
步骤
- 读取数据模型
- 创建并绑定纹理
- 建立面的法向量
- 将数据归一化显示在屏幕中间
- 绘制三维数据
主要的实现过程是这样,当然显示中还需要光照来配合法向量形成三维的效果和阴影!