Delphi 6集成开发环境09

上传人:油条 文档编号:12781647 上传时间:2017-09-04 格式:PDF 页数:41 大小:434.37KB
返回 下载 相关 举报
Delphi 6集成开发环境09_第1页
第1页 / 共41页
Delphi 6集成开发环境09_第2页
第2页 / 共41页
Delphi 6集成开发环境09_第3页
第3页 / 共41页
Delphi 6集成开发环境09_第4页
第4页 / 共41页
Delphi 6集成开发环境09_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《Delphi 6集成开发环境09》由会员分享,可在线阅读,更多相关《Delphi 6集成开发环境09(41页珍藏版)》请在金锄头文库上搜索。

1、 第 9 章 OpenGL 开发三维图形 OpenGL 是一个三维图形和模型库,由于它在三维图形方面的杰出性能,目前许多高级语言都提供了与 OpenGL 的接口,如 VC, Delphi 和 C+ Builder。使用 OpenGL 可以极大的减少用户开发图形、图像的难度,使用户可以制作高水准的商业广告、图形 CAD、三维动画、图形仿真和影视采集。本章重点介绍 OpenGL 的开发方法,为用户开发图形、图像提供参考。图 9-1 是采用 OpenGL 绘制的三维球体后再添加材质形成的图形,它是城市建筑大楼变形的示例。 图 9-1 城市建筑大楼变形示例 9.1 OpenGL 的基础 9.1.1 O

2、penGL 的功能 OpenGL 原来是工作站上的一个图形软件库,由于它在商业、军事、医学和航空航天等领域的广泛应用,目前已经由软件人员把 OpenGL 图形库移植到了微机平台,为用户开发高水平,而且符合自己要求的图形、图像软件提供了方便。 OpenGL 不仅能够绘制基本图像,而且提供了大量处理图形图像的函数和过程,如图形变换、光照、混合、投影和纹理函数。下面列出了 OpenGL 能够实现的一些重要功能: 1图形变换 图形变换是图形显示和制作的基础,动画设计和动画显示都离不开图形的变换,图形变换在数学上是由矩阵的乘法来实现的,变换一般包括平移、旋转和缩放。如果按图形的显示性质来分,可以把图象变

3、换分为视点变换、模型变换、投影变换、剪裁变换和视口变换等五类, OpenGL 对这些变换都提供了相应的函数和过程。 2图形的光照 不发光的物体的颜色是由物体反射外界光所形成的,这种外界光就是通常意义的光照。第 9 章 OpenGL 开发三维图形 251 在三维图形中,如果光照使用不当,三维图形就会失去真实的立体感, OpenGL 把光照分为辐射光、环境光、散射光和反射光四种独立的部分。 3纹理映射 纹理实际上是通常人们所说的材质(或者是纹路) ,通过纹理映射可以在三维物体表面添加显示现实世界中的纹理。例如,一个矩形它不能表示真实世界中的物体,如果把这个矩形填上“木质”纹理,这个矩形就有点像真实

4、世界中的木材表面,或者是一块木板。 4图形特殊效果 OpenGL 提供的混合函数、反走样函数和雾函数,可以处理三维图形中的物体的透明和半透明、使线段更加光滑以及提供雾化的特殊效果。 5图像特殊处理 OpenGL 提供了处理位图(图像)的一些基本函数,如图像的绘制、图像的拷贝和存储、映射和转移、图像的缩放。位图操作函数可以从绘图原理的低层说明中文字符的形成过程。 9.1.2 创建 OpenGL 应用程序的方法 1一般原则 由于 OpenGL 处理图形图像有自己独特的一套方案, 因而绘制图形的方法还是比较复杂,但本章提供使用 OpenGL 绘制图形的一般方法, 如果按照该方法进行绘图似乎还是比较简

5、单。下面是使用 OpenGL 绘制图形的一般步骤: 在窗体的 OnCreate 事件过程中初始化 OpenGL。 在窗体的 OnPaint 事件过程中初始化 OpenGL。 在窗体的 OnResize 事件过程中初始化 OpenGL。 在窗体的 OnClose 事件过程中初始化 OpenGL。 在头文件中增加变量、函数、过程声明和包含 OpenGL 头文件的语句。 2简单实例 下面以一个比较简单的实例,说明使用 OpenGL 绘制图形的方法,建立程序的步骤可以参照前面的指导。 首先,激活菜单 File/New Application,创建一个新工程。以文件名 GL.pas 保存文件。 在前面的

6、 uses 语句里加入 OpenGL 单元。 在窗体的 OnCreate 事件过程中添加如下代码初始化 OpenGL: procedure TForm1.FormCreate(Sender: TObject); var pfd: TPixelFormatDescriptor; PixelFormat: Integer; begin ControlStyle := ControlStyle+csOpaque; 252 第 9 章 OpenGL 开发三维图形 Fillchar(pfd,sizeof(pfd),0); with pfd do begin nSize := sizeof(TPixelF

7、ormatDescriptor); nVersion := 1; dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; iPixelType := PFD_TYPE_RGBA; cColorBits := 24; cDepthBits := 32; iLayerType := PFD_MAIN_PLANE end; PixelFormat := ChoosePixelFormat(Canvas.Handle,pfd); SetPixelFormat(Canvas.Handle,PixelFormat,p

8、fd); hrc := wglCreateContext(Canvas.Handle); w := ClientWidth; h := ClientHeight; end; 代码中的一些函数和过程的使用方法和意义将在以后内容中进行讲解。 在窗体的 OnPaint事件过程中添加如下代码绘制图形: procedure TForm1.FormPaint(Sender: TObject); begin wglMakeCurrent(Canvas.Handle,hrc); glClearColor(1,1,1,1); glColor3f(1,0,0); glClear(GL_COLOR_BUFFER_B

9、IT or GL_DEPTH_BUFFER_BIT); MyDraw; glFlush; SwapBuffers(Canvas.Handle); end; 其中,过程 MyDraw 是自定义过程,该过程绘制一个球体。在窗体的 OnResize 事件过程中添加如下代码控制图形的显示视口: procedure TForm1.FormResize(Sender: TObject); begin glMatrixMode(GL_PROJECTION); glLoadIdentity; glFrustum(-1.0,1.0,-1.0,1.0,3.0,7.0); glViewport(0, 0, Clie

10、ntWidth, ClientHeight); end; 在窗体的 OnClose 事件过程中添加如下代码释放 OpenGL 的设备表: procedure TForm1.FormDestroy(Sender: TObject); begin 第 9 章 OpenGL 开发三维图形 253 wglDeleteContext(hrc); end; 接下来,在窗体文件中自定义一个 MyDraw 过程绘制球体: procedure TForm1.MyDraw; begin glPushMatrix; Sphere := gluNewQuadric; gluQuadricDrawStyle(Spher

11、e,GLU_LINE); gluSphere(Sphere,0.5,25,25); glPopMatrix; SwapBuffers(Canvas.Handle); gluDeleteQuadric(Sphere); end; 其中, gluSphere 过程绘制球体。 在窗体单元的类声明中 private 关键词下增加变量的声明,即: private Private declarations hrc: HGLRC; w,h: GLfloat; Sphere: GLUquadricObj; 在窗体单元的头文件中 public 关键词下增加自定义过程的声明,即: public Public de

12、clarations procedure MyDraw; 为了便于用户核对源程序, 下面列出了窗体文件的全部源代码, 注意程序中加黑的部分。 unit GL; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,OpenGl; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedur

13、e FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); private Private declarations 254 第 9 章 OpenGL 开发三维图形 hrc: HGLRC; w,h: GLfloat; Sphere: GLUquadricObj; public Public declarations procedure MyDraw; end; var Form1: TForm1; implementation $R *.dfm 按 F9 键运行程序,如图 9-2 所示是程序运行的一个示例。 从图形上

14、看, 虽然 OpenGL 很容易就绘制了一个球体, 但目前这个球体还没有三维效果,以后给球加上材质(纹理)和光照后,就可以观察到非常真实的三维效果。 本章以后各节大多数实例只更改 MyDraw 过程中的内容,以便减少描述代码的篇幅,因为大多数实例的 OnCreate, OnPaint, OnResize 和 OnDestory 内容都基本相同。 图 9-2 用 OpenGL 绘制球体 为了便于用户核对源程序,下面列出了 GL.pas 文件的内容: unit GL; interface uses Windows, Messages, SysUtils, Variants, Classes, Gr

15、aphics, Controls, Forms, Dialogs,OpenGl; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); 第 9 章 OpenGL 开发三维图形 255 procedure FormDestroy(Sender: TObject); procedure FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); private Private declarations hrc: HGLRC; w,h: GLfloa

16、t; Sphere: GLUquadricObj; public Public declarations procedure MyDraw; end; var Form1: TForm1; implementation $R *.dfm procedure TForm1.FormCreate(Sender: TObject); var pfd: TPixelFormatDescriptor; PixelFormat: Integer; begin ControlStyle := ControlStyle+csOpaque; Fillchar(pfd,sizeof(pfd),0); with pfd do begin nSize := sizeof(TPixelFormatDescriptor); nVersion := 1

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号