首页 理论教育 三维人体模型的显示优化

三维人体模型的显示优化

时间:2023-06-23 理论教育 版权反馈
【摘要】:通过变换处理提高算法的运行效率并提高三维图形的显示速度。⑤纹理映射OpenGL具有十分强大的纹理映射功能,通过纹理映射实现三维仿真物体的真实感显示。图3-19OpenGL工作流程图a.根据基本图形单元建立人体/服装模型,并对其进行数学描述。d.把模型的数学描述及其颜色信息转换为像素并显示出来,即光栅化。OpenGL消隐处理为了实现三维人体/服装显示的真实感,需要在三维人体/服装显示时消去自身遮挡或相互遮挡而无法看见的线或面,即消隐。

三维人体模型的显示优化

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 人体正、侧、背面模型

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈