【openGL2021版】obj模型

      大家好,我是Lampard猿奋~

今天学习的是obj模型

 

可以进行obj几何操作的python库 obj模型库_可以进行obj几何操作的python库

 (一)要做什么

      上周我们给制作的图形(三角形,矩形)贴上了皮肤,学习到了法线,光照,纹理坐标等知识。然后又解读了obj格式的文件

可以进行obj几何操作的python库 obj模型库_图形学_02

       因此本周我们只需要解码这个obj文件,然后利用openGL给我们接口,去批量的生成绘制的点,就很方便的画出我们想要的图形了

可以进行obj几何操作的python库 obj模型库_图形学_03

 (二)解码obj数据

(1)obj文件格式

顶点数据以及点的组成方式

      下图中v代表的是顶点的坐标,vt代表的是纹理坐标,vn代表的是法线。f后面接的是三个点,三个点组成一个三角形,如“1/1/1”代表用第一个顶点信息,第一个纹理坐标信息以及第一个法线信息构成一个点,然后由点‘1/1/1’,“2/2/2”和“3/3/3”来构成一个面

可以进行obj几何操作的python库 obj模型库_线框_04

(2)读取需要的内容

     其头文件包含以下的内容

可以进行obj几何操作的python库 obj模型库_数据_05

      其中VertexData是这样的一个结构,记录每个点三项属性的数据,实际去重后有多少个点

可以进行obj几何操作的python库 obj模型库_线框_06

       mIndices是记录第几个点的一个数组,如上图obj格式中,就是1,2,3,3,2,4(两个三角形有6个点,但是实际我们只需要绘制4个点),具体的读取字符串的方式就不表了,打印一下存储的内容

可以进行obj几何操作的python库 obj模型库_可以进行obj几何操作的python库_07

 (三)调用openGL接口生成模型

    glTexCoord2fv,glNormal3fv以及glVertex3fv来绘制我们的点,然后在main中调用这个draw方法即可。我们上图的正方形obj绘制出来的结果是这样:

可以进行obj几何操作的python库 obj模型库_线框_08

       使用线框模式glPolygonMode(GL_FRONT, GL_LINE);可以明显的看出每个点之间的关系

可以进行obj几何操作的python库 obj模型库_可以进行obj几何操作的python库_09

       同样的我们可以把一个球模型放进去看看效果

可以进行obj几何操作的python库 obj模型库_图形学_10

       这是线框模式下的球,可以看到一个球就是由不同的三角形面组成的,而我们就可以利用编辑器像maya这种制作模型,然后导入到引擎中,非常方便

可以进行obj几何操作的python库 obj模型库_可以进行obj几何操作的python库_11

好啦今天就到这里

点赞,关注!!!

可以进行obj几何操作的python库 obj模型库_线框_12