240 likes | 572 Views
OpenGL 图形函数库. 开放式的三维图形软件包 OpenGL. OpenGL 是近几年发展起来的一个性能卓越的 三维图形标准 ,它是在 SGI 等多家世界闻名的计算机公司的倡导下,以 SGI 的 GL 三维图形库为基础制定的一个通用共享的开放式三维图形标准。 目前,包括 Microsoft 、 SGI 、 IBM 、 SUN 、 HP 等大公司都采用了 OpenGL 做为三维图形标准,许多软件厂商也纷纷以 OpenGL 为基础开发出自己的产品。. OpenGL 的优越性. 独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;
E N D
开放式的三维图形软件包OpenGL • OpenGL是近几年发展起来的一个性能卓越的三维图形标准,它是在SGI等多家世界闻名的计算机公司的倡导下,以SGI的GL三维图形库为基础制定的一个通用共享的开放式三维图形标准。 • 目前,包括Microsoft、SGI、IBM、SUN、HP等大公司都采用了OpenGL做为三维图形标准,许多软件厂商也纷纷以OpenGL为基础开发出自己的产品。
OpenGL的优越性 • 独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植; • 可与Visual C++紧密接口,便于实现有关计算和图形算法,可保证算法的正确性和可靠性; • 使用简便,效率高。
OpenGL图形库的功能 OpenGL图形库一共有100多个函数。其中核心函数有115个。除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面(如Bezier、NURBS等曲线或曲面)绘制函数。 • 基本几何变换和投影变换。 • 颜色模式设置 • 光照和材质设置 • 纹理映射功能 • 位图显示和图象增强 反走样(Antialiasing)和雾(fog)的特殊图象效果处理 • 双缓存(Double Buffering)动画 双缓存即前台缓存和后台缓存,即后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。
OpenGL程序的基本结构 OpenGL程序基本结构由OpenGL初始化的绘图状态描述和绘制对象组成。OpenGL为用户提供了3个函数库: • OpenGL基本库opengl32.lib,操作函数前缀gl • OpenGL实用库glu32.lib,操作函数前缀glu • OpenGL辅助库glaux.lib,操作函数前缀aux 编程时需将这三个函数库加到工程(project)中。
OpenGL基本函数库 • OpenGL基本函数库用来描述图元、属性、几何变换、观察变换和进行许多其它的操作。 • OpenGL基本函数库中的函数名要以gl为前缀,且函数名中每一组成词的第一个字母要大写。 glBegin glClear glCopyPixels • 常量均以大写字母GL开头,另外,常量名中各组成词均采用大写,单词之间用下划线分隔。 GL_RGB GL_AMBIENT_AND_DIFFUSE • 数据类型名以大写字母GL开头,名字中其余部分是用小写字母表示的标准数据类型名。 GLbyte GLshort GLint
OpenGL实用函数库 OpenGL实用函数库提供了一些例程,可以设置观察和投影矩阵,利用线条和多边形近似法来描述复杂对象,使用线性近似法显示二次曲线和样条曲线,处理表面绘制操作,以及完成其它的复杂任务。 操作函数前缀glu
OpenGL辅助函数库 这个库建立了一系列简单而又较完整的编程例子,例如初始化窗口、监控输入,以及绘制一些三维几何体等函数。辅助库函数用前缀aux。
OpenGL实用函数工具包 OpenGL实用函数工具包(OpenGL Utility Toolkit,GLUT)提供了与任意屏幕窗口系统进行交互的函数库。 GLUT库函数以glut为前缀,该库中也包含了描述与绘制二次和样条曲线及曲面的方法。
OpenGL状态机制 OpenGL的工作方式是一种状态机,它可以进行各种状态或模式设置,这些状态或模式在重新改变它们之前一直有效。例如,当前颜色就是一个状态变量,在这个状态改变之前,绘制的每个象素都将使用该颜色,直到当前颜色被设置为其它颜色为止。OpenGL中大量地使用了这种状态机制,如颜色模式、投影模式、单双显示缓存区的设置、背景色的设置、光源的位置和特性等等。许多状态变量可以通过glEnable(),glDisable()这两个函数来设置成有效或无效状态,如是否设置光照、是否进行深度检测等;在被设置成有效状态之后,绝大部分状态变量都有一个缺省值。
OpenGL程序结构 • 初始化操作—主要是设置一些OpenGL的状态开关,如颜色模式的选择,是否作光照处理(若有的话,还需设置光源的特性),深度检验,裁剪等等。 • 定义窗口—定义所绘对象在屏幕坐标系的显示位置和显示窗口大小及其属性。 • 绘制和显示图形—使用OpenGL的库函数构造几何物体对象的数学描述,包括点线面的位置和拓扑关系,几何变换,光照处理等等。实现图形显示。
Glut配置 • glut是一个win32 dynamic lib,先下载 glutdlls37beta.zip, • 解压后把glut32.dll放到 windows system目录下。 • 另建目录,如 c:\glut,再在c:\glut下面 建c:\glut\include\gl,把头文件glut.h放到c:\glut\ include\ gl下面。 • 再在c:\glut下面建c:\glut\lib,把glut32.lib放在c:\glut\lib下面。 • 把glut加到工程中(project)
头文件 在所有的程序中需要包含一个头文件以引入OpenGL核心库。在许多应用中需要GLU,需要包含头文件来引入窗口系统,因此,源程序的开头几行 为: #include <windows.h> #include <GL/gl.h> #include <GL/glu.h> 但如果使用GLUT处理窗口管理操作,就不需要引入gl.h和glu.h,因为GLUT保证了它们的正确引入,可使用#include <GL/glut.h>代替OpenGL和GLU的头文件。
#include <GL/glut.h> // (or others, depending on the system in use) void init (void) { glClearColor (1.0, 1.0, 1.0, 0.0); // Set display-window color to white. glMatrixMode (GL_PROJECTION); // Set projection parameters. gluOrtho2D (0.0, 200.0, 0.0, 150.0); } void lineSegment (void) { glClear (GL_COLOR_BUFFER_BIT); // Clear display window. glColor3f (0.0, 0.0, 1.0); // Set line segment color to red. glBegin (GL_LINES); glVertex2i (180, 15); // Specify line-segment geometry. glVertex2i (10, 145); glEnd ( ); glFlush ( ); // Process all OpenGL routines as quickly as possible. }
void main (int argc, char** argv) { glutInit (&argc, argv); // Initialize GLUT. glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB); // Set display mode. glutInitWindowPosition (50, 100); // Set top-left display-window position. glutInitWindowSize (400, 300); // Set display-window width and height. glutCreateWindow ("An Example OpenGL Program"); // Create display window. init ( ); // Execute initialization procedure. glutDisplayFunc (lineSegment); // Send graphics to display window. glutMainLoop ( ); // Display everything and wait. }