基于OpenGL的三维模型交互显示研究
XX 1 ,XX 1
(1.XXXXXXXXXXXX)
摘要:本文采用现今已被广泛认可的3D图形开发标准即OpenGL免费的图形库针对三维模型的交互显示进行研究。主要论
述了OpenGL的技术特点与显示原理,模型交互变换原理。在此基础上设计实现了基于OpenGL的三维模型交互显示。
关键词:OpenGL;三维模型;交互显示 中图分类号:TP391.9 文献标识码:A
The Research on the Interactive Display of Three-dimensional Model Based on OpenGL
XX 1, XX 1
(1.XXXXXXXXXXXX)
Abstract: Open Graphics Library, has been widely recognized as the development standard of 3D graphics, is adopted for the research of the interactive display of three dimensional models. Some questions were discussed, including the display principles of OpenGL, model interactive transformation principle. Finally, the interactive display of three dimensional model based on OpenGL was developed.
Keywords: OpenGL; Three-dimensional model; Interactive display
域的标准图形库。 1 引言
随着图形技术的发展,三维模型的建模技术得到OpenGL是输出到图形硬件的一个软件编程接口,了广泛的应用,同时人们也越来越多的通过计算机显大约包括120条不同命令,用来定义三维物体和交互示三维模型来进行人机交互,进而更好的对已存在的式应用的各种操作。OpenGL用户必须从几何图元三维模型进行修改。三维模型的交互显示是人机友好( Geometric primitives)的点、线和多边形开始构造所希的一个重要方面,为了可以通过计算机的二维屏幕全望的三维模型。它在构造三维立体时,从共面性能考面观察和了解以及修改三维模型,计算机必须能够实虑,使用三角形来逼近空间实体。它具有建模、坐标现对三维模型的交互显示变换,即用户可以通过鼠标、变换、光线处理、色彩处理、动画以及其它更先进的键盘或其他输入设备控制三维模型的显示位置,放大高级图形处理能力,如纹理映射、物体运动模糊效果缩小,旋转,移动等功能。OpenGL是一个跨平台、功等,可以制作真实感非常强的三维立体图形。 能强大、调用方便的底层图形库,已成为三维图形开2.2 OpenGL的显示原理 发标准,具有高度的可靠性、可扩展性、可伸缩性、在OpenGL显示过程中,三维模型经过变换管线灵活性等特点。OpenGL中可利用模型变换和视点变换中的模型或视点变换、投影变换、三维裁剪、视口变实现对三维模型的显示变换,OpenGL实用库提供了换等,最终在二维屏幕上显示为真实感的图像。三维gluLookAt()函数执行视点变换,glMatrixMode()函模型显示到二维屏幕,如图1所示。图中,坐标系X m 数设置所需要的矩阵模式,glViewPort()函数设置视口Y m Z m—世界坐标系;Xv Yv Z v—OpenGL视点坐标的大小和位置。简单的使用这些函数就可以实现三维系,两个坐标系均符合右手规则。投影变换定义了一模型的交互显示,因此采用OpenGL开放图形库进行个视景体,视景体限定了能够在屏幕上显示的模型空三维模型的交互显示研究。 间区域,视景体外的空间是不可见的。视景体在正交
投影下为长方体,它是根据视点坐标系构建的,即当2 OpenGL的技术特点与显示原理
2.1 OpenGL的技术特点 从视点坐标系Z v轴正方向往其负方向看时,X v正向
OpenGL是Open Graphics Library的缩写,它是指向右手方向,Y v正向指向头顶方向,此时视景体的SGI公司开发的一套高性能图形处理系统,是图形硬左和右、顶和底、近和远等六个平面的位置都是由视件的软件界面,意为开放的图形库。通过OpenGL程点坐标系相应坐标轴值来指定的。 序员可以创建交互式的应用程序,实现具有逼真效果OpenGL中三个模型变换函数是分别通过改变模的三维图形图像,从而在要求高度模拟真实世界的诸型相对于视景体和视点坐标系的位置、比例和方向来多领域中可以大显身手。由于其开放性和高度的可重实现平移、缩放和旋转显示;而视点变换函数则是通用性,目前已成为业界标准。OpenGL被设计成独立于过改变视点坐标系相对于世界坐标系的位置和方向来硬件、独立于窗口系统的,在运行各种操作系统的各实现各种变换。另外,OpenGL正交投影变换函数种计算机上都可用,并能在网络环境下以客户/服务器glOrtho()可以改变视景体大小及其与视点坐标系相模式工作,是专业图形处理、科学计算等高端应用领对位置。因此利用正交投影变换函数结合视点变换函
数,就可以改变视景体与模型的相对位置、比例和方向,实现三维模型的交互显示。
图1 OpenGL显示原理
3 模型交互变换
通过模型变换可以实现对物体进行平移、旋转和放缩等操作。缺省时,三维模型(模型中心位置)定位在坐标系的原点处。OpenGL有三个模型转换命令:glTranslate*()、glRotate*()、glScale*(),这三个函数分别对模型进行平移、旋转和缩放操作,若程序提供有用户操作接口,即可实现交互。 3.1 平移交互
在OpenGL中使用glTranslate*()函数实现平移显示变换。函数参数如下所示:
void glTranslate {fd} (TYPE x, TYPE y, TYPE z); 函数说明:用给定的x,y,z值沿着x轴,y轴和z轴平移坐标系,然后重绘物体。平移向量用来计算4*4阶平移矩阵T。
?1000??T??0100???并用平移矩阵乘以当前矩阵,?0010??xyz1??若当前矩阵为M,经过平移后的当前矩阵则为M*T。同时也可以通过正交投影函数glOrtho*D()函数设置视景体相对于十点坐标系的位置实现平移变换。函数参数如下所示:
glOrtho*D(GLdoubleleft,GLdoubleright,GLdoublebottom,GLdoubletop,GLdouble near,GLdouble far);
为了实现用户控制三维模型实现交互显示,我们须在程序中添加代码。例如当用户使用键盘的’g’建时,实现三维模型的平移操作,效果如图3.1所示,部分代码如下:
distance=distance+0.2; ... ...
switch (key) { case 'g': move ();
… … }
glutPostRedisplay (); … …
glBegin (GL_QUADS); glColor3f (0.0f, 1.0f, 0.0f); glVertex3f (1.0f, 1.0f,-1.0f); glVertex3f (-1.0f, 1.0f,-1.0f); glVertex3f (-1.0f, 1.0f, 1.0f); glVertex3f (1.0f, 1.0f, 1.0f); ... ... glEnd ();
glTranslatef (distance, 0.0, 0.0); … …
glutKeyboardFunc (key);
图2.1 平移交互
3.2 旋转交互
glRotate*()可实现物体的旋转。其参数分别指定了一个角度和三个坐标值 (X、Y 、Z )。操作的结果是将物体围绕原点到指定点 (X、Y、Z )的直线旋转指定的角度。通过Rotate可以实现对物体的任意方式的旋转操作。旋转变换函数如下所示:
void glRotate {fd} (TYPE angle, TYPE x, TYPE y, TYPE z);
函数说明:当前矩阵与该函数生成的旋转矩阵相乘,从而生成新的当前矩阵。若当前矩阵为M,旋转矩阵为R,则生成的新的当前矩阵为M*R。
同样,采用按键‘g’来实现三维模型的旋转操作,效果如图2.2所示,部分代码如下:
spin=spin+1; ... ...
switch (key) { case 'g': rotate (); … … }
glutPostRedisplay (); … …
glBegin (GL_QUADS); glColor3f (0.0f, 1.0f, 0.0f); glVertex3f (1.0f, 1.0f,-1.0f); ... ... glEnd ();
glRotatef (spin, 1.0, 1.0, 0.0); … …
glutKeyboardFunc (key);
图2.2 旋转交互
3.3 缩放交互
glScale*()可实现物体的缩放, 其参数分别用来指定物体在三个坐标轴方向上的缩放比例, 当三个方向指定的缩放比例不一致时, 还可以实现对物体在某个方向进行拉伸的功能。缩放变换函数如下:
void glScale {fd} (TYPE x, TYPE y, TYPE z);
函数说明:该函数使物体沿着指定的x,y轴进行缩放,参数x,y,z分别表示沿着三个轴向进行缩放操作的比例因子。该函数中的变量生成缩放矩阵S:
?1000??S??0100???其中,s是x,y,z三轴方向?0010??000s??共同的缩放因子,若以s除以矩阵的各项,将得到比
??1000??例变换矩阵?s?01?00?。 S???s??1??00?s0???0001??同样,采用按键‘g’来实现三维模型的旋转操作,
效果如图2.3所示,部分代码如下:
s=s+1; ... ...
switch (key) { case 'g': scale (); … …
}
glutPostRedisplay (); … …
glBegin (GL_QUADS); glColor3f (0.0f, 1.0f, 0.0f); glVertex3f (1.0f, 1.0f,-1.0f); ... ... glEnd (); glScalef (s, s, s); … …
glutKeyboardFunc (key);
图3.3 缩放变换
4 结束语
通过以上分析,可以很好的运用OpenGL对三维模型进行显示,并且可以使用户使用键盘或者鼠标控制三维模型的平移、旋转、缩放操作。
参考文献
[1] 王映辉.3D 建模与编程技术[J].计算机应用研究,
2004(1)
[2] 卢迪,李大辉,吴海涛.计算机图形学原理及应用[M].
国防工业出版社,2009.7
[3] Dave Shreiner,The Khronos OpenGL ARB Working
Group.OpenGL 编程指南[M].李军,徐波,译. (第 7 版).机械工业出版社,2010.1
[4] 吴慧欣,毋建宏,薛惠锋. 基于 OpenGL 的交互式三
维建模仿真应用研究[J]. 计算机工程与设计,2006.2
[5]