obj是常见的3D模型文件格式,如何使用OpenGL读取obj文件并渲染出来呢?
工具
- CodeBlocks
- GLUT
CodeBlocks中使用GLUT
这是一个新手常见的问题,首先你需要去网上下载一个glut包,然后将解压后的文件按照下面的步骤配置:
32 位系统:
- 拷贝glut32.dll 到c:\windows\system
- 拷贝glut32.lib到c:\program files\mingw\lib
- 拷贝glut.h 到c:\program files\mingw\include\GL
64位系统:
- 拷贝glut.dll 到c:\windows\SysWOW64
- 拷贝glut.lib到c:\program files\mingw\lib
- 拷贝glut.h 到c:\program files\mingw\include\GL
很多时候,虽然我是64位系统,但是还需要把32位系统的也配置一遍,也许是因为我的CodeBlocks是32位的…
配置完成后,打开CodeBlocks新建一个项目,项目类型选择时,选GLUT project即可,创建完成后,直接编译运行。如果报下面这个错:
undefined reference to _imp__glViewport
在main.cpp文件头加上这句:
#include <windows.h>
或者下面这个;
#define _STDCALL_SUPPORTED
如果不出意外的话,就可以运行这个demo了:
读取obj文件
首先我们要知道obj文件格式。obj文件格式比较复杂,但是渲染出简单的物体,我们只需要知道两个:顶点v和面f。下面是teapot.obj的一部分:
最简单的格式:
- v -6.5 12 0:v开头的这一行表示一个顶点,三维坐标为(-6.5,12,0)
- f 1 2 3:f开头的这一行表示一个面,这个面有三个顶点,这三个顶点的索引值分别为 1,2,3
索引值就是顶点在文件里的顺序,从1开始。
我们现在可以设计一个数据结构来表示obj了:
逐行读取obj文件,然后根据行首的关键字,做不同的处理:
渲染
|
|