【openGL2021版】obj模型
大家好,我是Lampard猿奋~
今天学习的是obj模型
(一)要做什么
上周我们给制作的图形(三角形,矩形)贴上了皮肤,学习到了法线,光照,纹理坐标等知识。然后又解读了obj格式的文件
因此本周我们只需要解码这个obj文件,然后利用openGL给我们接口,去批量的生成绘制的点,就很方便的画出我们想要的图形了
(二)解码obj数据
(1)obj文件格式
顶点数据以及点的组成方式
下图中v代表的是顶点的坐标,vt代表的是纹理坐标,vn代表的是法线。f后面接的是三个点,三个点组成一个三角形,如“1/1/1”代表用第一个顶点信息,第一个纹理坐标信息以及第一个法线信息构成一个点,然后由点‘1/1/1’,“2/2/2”和“3/3/3”来构成一个面
(2)读取需要的内容
其头文件包含以下的内容
其中VertexData是这样的一个结构,记录每个点三项属性的数据,实际去重后有多少个点
mIndices是记录第几个点的一个数组,如上图obj格式中,就是1,2,3,3,2,4(两个三角形有6个点,但是实际我们只需要绘制4个点),具体的读取字符串的方式就不表了,打印一下存储的内容
(三)调用openGL接口生成模型
glTexCoord2fv,glNormal3fv以及glVertex3fv来绘制我们的点,然后在main中调用这个draw方法即可。我们上图的正方形obj绘制出来的结果是这样:
使用线框模式glPolygonMode(GL_FRONT, GL_LINE);可以明显的看出每个点之间的关系
同样的我们可以把一个球模型放进去看看效果
这是线框模式下的球,可以看到一个球就是由不同的三角形面组成的,而我们就可以利用编辑器像maya这种制作模型,然后导入到引擎中,非常方便