OpenGL是行业领域中最为广泛接纳的2-D/3-D图形API,许多知名的优秀应用程序均以OpenGL为开发基础并与其有广泛的接口应用。OpenGL独立于操作系统并与硬件无关,可以在不同的操作平台间移植。在很多技术领域,尤其是3-D建模技术、虚拟现实技术、三维仿真技术等领域,OpenGL在图形图像处理、三维显示等方面显示出卓越的性能。
OpenGL是与硬件无关的软件接口,可以在不同的平台如Windows、Unix、Linux、Mac OS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS、3ds Max等3-D图形设计软件制作的DXF和3DS模型文件转换成OpenGL的顶点数组。
OpenGL可以与VC++紧密接口,可保证算法的正确性和可靠性;OpenGL使用简便,效率高。它具有以下七大功能:
①建模
OpenGL图形库提供了点、线、多边形、复杂的曲线与曲面、复杂的三维物体(球、锥、多面体等)的绘制函数,为用户进行三维建模提供强大工具。
②变换
OpenGL提供了一系列的变换操作,包括平移、旋转、缩放、镜像四种基本变换和平行、透视两种投影变换。通过变换处理提高算法的运行效率并提高三维图形的显示速度。
③颜色模式设置
OpenGL中颜色模式有RGBA模式和颜色索引(Color Index)两种。
④光照和材质设置
OpenGL提供多种光照设置,如自发光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和高光(Specula Light)等。材质设置主要通过光反射率来设置。通过将光照的RGB分量与材质RGB分量的反射率相乘后形成物体的颜色。
⑤纹理映射
OpenGL具有十分强大的纹理映射功能,通过纹理映射实现三维仿真物体的真实感显示。
⑥三维显示和图像增强
OpenGL函数库提供了基本的COPY和像素读写功能,同时还提供了诸如融合(Blending)、抗锯齿(Antialiasing)和雾(Fog)的特殊图像效果处理,用于增强图形的显示效果,使三维仿真模拟更加逼真。
即前台缓存和后台缓存,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。
此外,利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果,从而实现了消隐算法。
(1)OpenGL建模
应用OpenGL绘制、显示三维人体/服装主要包括四个基本步骤(图3-19)。
图3-19 OpenGL工作流程图
a.根据基本图形单元(点、线、多边形等)建立人体/服装模型,并对其进行数学描述。
图3-20 坐标系
b.把模型放置于一定的三维空间中,设置观察点。
c.计算人体/服装模型中所包含的颜色,根据具体应用确定光照条件、纹理映射方式等。
d.把模型的数学描述及其颜色信息转换为像素并显示出来,即光栅化。
(2)OpenGL变换
在OpenGL中,三维物体所处的空间坐标系为世界坐标系,视点和物体的位置都是通过该坐标系进行描述的(图3-20)。
通过一系列的三维变换就可以将人体/服装的三维坐标转换到屏幕对应的像素位置,OpenGL为编程人员提供了变换函数:
①基本变换
基本变换有平移、旋转、缩放、镜像四种变换,相应的变换函数为:
void glRotate{fd}(type angle,type x,type y,type z);
void glTranslate{fd}(type x,type y,type z);
void glScale{fd}(type x,type y,type z)。
②投影变换
投影变换有平行投影和透视投影两种,平行投影的变换函数为:(www.xing528.com)
Void glOrtho(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far)。
透视投影的变换函数有两种,分别为:
void glFrustm(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);
void glFrustm(GLdouble left,GLdouble right,GLdouble bottom,GLdouble far)。
③视口
经过基本变换和投影变换后的物体显示在屏幕指定的区域内,视口变换函数为:
Void glViewPort(Glint x,Glint y,GLsizei w,GLsizei h)。
有关流程如图3-21所示。
(3)OpenGL消隐处理
为了实现三维人体/服装显示的真实感,需要在三维人体/服装显示时消去自身遮挡或相互遮挡而无法看见的线或面,即消隐。OpenGL中消隐操作主要有两类:一类是场景中多边形后向面的处理,函数为:
图3-21 三维图形显示流程
glEnable(GL_CULL_FACE);
glCullFace(mode);
…
glDisable(GL_CULL_FACE)。
另一类消隐操作是通过深度缓冲方法(z-buffer)来实现的,其函数为:
Void glDepthFunc(GLenum func)。
(4)OpenGL光照设置
OpenGL中,常用光照模型来绘制可视面的亮度或颜色,通过散射光、镜面反射光、环境光、反射光四种光的组合来模拟真实世界的光照。
OpenGL中光照设置首先确定每个顶点的法向量,函数为:
void glNormal3f(GLfloat nx,GLfloat ny,GLfloat nz)。
然后创建光源模型,函数为:
void glLightfv(Glenum light,Glenum pname,TYPE*param)。
(5)OpenGL三维显示
通过三维建模、三维变换、消隐处理、光照设置后,就可以绘制人体/服装三角形曲面片模型了,相应的绘制语句为:
glBegin(GL_TRIANGLES);
glNormal3d(pn1.x,pn1.y,pn1.z);
glVertex3d(p1.x,p1.y,p1.z);
glNormal3d(pn2.x,pn2.y,pn2.z);
glVertex3d(p2.x,p2.y,p2.z);
glNormal3d(pn3.x,pn3.y,pn3.z);
glVertex3d(p3.x,p3.y,p3.z);
glEnd。
通过以上处理,就可以得到真实感的人体模型(图3-22)。
图3-22 人体正、侧、背面模型
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。