在上一章中,我们使用OpenGL ES绘制了一个 平平无奇的三角形 。那么如何绘制3D模型呢?其实,在计算机的世界中,所有的3D模型都是由无数的三角平面拼接而成。
通常我们使用.stl格式来记录一个3D模型的三角平面信息,根据.stl文件中记录的三角平面信息,我们能够还原出一个完整的3D模型。
因此,本文将介绍,如何从.stl解析出三角平面信息,并绘制出来。
STL 是一种文件格式,格式如:
其中,每个三角面的信息分为三部分:顶点坐标、法线分量、属性位。
和上一章我们画三角形的原理类似,三角形的三个顶点坐标,将决定三角平面的位置与形态。
三点只能确定一个三角形的平面,但平面有两面,到底哪一面是对外的,却无法确定。此时,我们可以设置一个法线,法线的方向就是三角形平面的外面。法线的方向,由xyz三个轴上的分量长度决定。
值得注意的是,如果我们不设置法线,或设置(0,0,0)。则会根据三角形三个顶点的加载顺序,以 右手定则 的形式,确定三角形平面的外面。
不常使用的保留位置。
注释写得比较清楚,不再赘述。在这一段解析中,我们不仅会获得三角形平面的顶点坐标和法向量数组,我们还提供了计算最大半径,计算中心点等方法。
在画布完成创建时,我们需要进行一些初始工作:
这里与上一节的例子类似,不再赘述。
gluLookAt 方法非常有趣。它决定了我们看物体的角度。
想象一下,当我们要看一个物体时,我们有三个属于可以改变:
余下的部分都是非常套路的绘制三角形,不再重复分析。
以上,就是通过STL文件,导致三维模型数据并绘制的全过程。
如有问题,欢迎指正。
.stl是通用格式,一般三维软件都可以将自己生成的模型另存为stl文件。 比如autocad,solidworks,ug,proe等等,都可以打开或另存为stl格式。 stl是片层格式文件,一般用这种格式输入3D打印机直接快速成型实体模型,工业设计比较常用。Frame Buffer 对象的概念可以参见前面文章Android OpenGL es 开发教程(23):FrameBuffer。简单的和2D图像类比,Frame Buffer 如果 对应到二维图形环境中,就是一个2D的内存数组空间,缺省情况为屏幕的显存,也可以创建Offscreen 内存空间,此时Frame Buffer 可以是一个二维数组,数组每个元素代表一个像素颜色。对于三维图形来说,除了需要代表颜色的二维数组(Color Buffer),还需要深度二维数组(Depth Buffer) 或遮罩数组(Stencil Buffer),因此在OpenGL 中的Frame Buffer为上述Color Buffer,Depth Buffer,Stencil Buffer 的集合。如果手机具有gpu,其缺省的Frame Buffer也是3D屏幕显示区域。通过Opengl es扩展支持,应用程序也可以创建内存中的Frame Buffer对象(不用于屏幕显示)。通过这种应用程序创建的FrameBuffer对象,OpenGL应用可以将图像显示输出重新定向到这个非屏幕显示用FrameBuffer对象中,类似于二维图形绘制中常用的Offscreen 技术。和缺省的屏幕显示FrameBuffer一样,由应用程序创建的FrameBuffer对象也是由Color Buffer, Depth Buffer和Stencil Buffer(可选)的集合组成。这些Buffer在FrameBuffer对象中可以称为FrameBuffer-attachable 图像,FrameBuffer定义了一些接入点(Attachment Point)可以用于连接(Attach)这些Buffer数组。OpenGL ES定义了两种FrameBuffer-attachable 图像,Texture 和 renderbuffer ,简单的可以将Texture 理解为Color buffer 或是2D图像,render buffer 对应于depth buffer。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)