OBJ文件是一种3D模型文件,文件的介绍呢,我就不多说了,可以去百度百科上查询,非常详细。
现在写opengl程序的时候需要用到一些3D模型文件,我学过maya的一些建模方法,maya能导出obj格式的模型,因此现在开始研究一下如何读取,并在opengl程序里面绘制出OBJ模型。
本来是想从网上找点源代码的,但是后来发现网上好多代码都只能读取某些OBJ文件,不能读取和绘制所有的,总会出现这样或者那样的错误。于是没办法,只能自己来研究一下,自己写了。
从一个简单的例子说起,下面是一个最简单的obj的文件结构:
v -1 0 0
v 1 0 0
v 1 1 0
v -1 1 0
f 1 2 3 4
这个文件怎么得到呢?这里我们不用3D建模软件,这样可以看得更清晰这种文件到底是怎么存放数据的。
新建一个txt文件,然后把上面的数据复制进去,然后把这个文件改名为A.obj,这样一个obj文件就写好了,为了测试,我用的是osgviewer。我在A.obj文件的同一目录下用cmd的方式查看了一下刚才创建的OBj文件,cmd命令和执行结果如下:
换个角度看:
这样就绘制出了这一个面。这里可以看出,obj文件的前面的部分表示的是定点,后面的f后面的数字表示:这些定点如何形成一个面。v表示vertex,f表示face。f 1 2 3 4中的1 2 3 4分别是这些定点的索引,表示这个面是从1号点出发连接2号点,再从2号点出发连接3号点,再从3号点出发连接4号点。
学过vrml的人知道这个跟vrml的书写格式很相似。
OK,这篇文章就分析这点最基础的obj的文件结构,下篇文章继续写obj文件中其他参数。
http://zgzamoshi.blog.163.com/blog/static/573886042010112881932244/