当前位置:文档之家› OpenGL及其在VC_开发环境下的编程实现

OpenGL及其在VC_开发环境下的编程实现

OpenGL及其在VC_开发环境下的编程实现
OpenGL及其在VC_开发环境下的编程实现

第20卷第4期2006年7月

山东理工大学学报(自然科学版)

Journal of Shandong University of Technology(Sci&Tech)

Vol.20No.4

J ul.2006

文章编号:1672-6197(2006)04-0036-03

Open G L及其在VC++

开发环境下的编程实现

王兰美1,赵继成2,秦华东2

(1.山东理工大学轻工与农业工程学院,山东淄博255049;

2.山东理工大学机械工程学院,山东淄博255049)

摘 要:介绍了Open G L的基本知识,阐述了Open G L与VC++应用接口的建立步骤以及如何设置Open G L的绘制环境,从而实现Open G L在VC++开发环境下编程.

关键词:Open G L;VC++;接口;三维图形

中图分类号:TP391文献标识码:A

Open G L and itπs programming under VC++developing environment WAN G Lan2mei1,ZHAO Ji2cheng2,Q IN Hua2dong2

(1.School of Light Industry and Agricultural Engineering,

Shandong University of Technology,Zibo255049,China;

2.School of Mechanical Engineering,Shandong University of Technology,Zibo255049,China)

Abstract:The basic t heory of Open G L was int roduced,t he step s t hrough which A PI was built between Open G L and VC++and how to set t he drawing environment s of Open G L were expounded.Thus,Open G L programming using VC++is realized.

K ey w ords:Open G L;VC++;interface;t hree dimension grap hics

“开放式图形库”Open G L是一个三维图形和

模型库,它是由美国SGI(Silicom Grap hics Inc.)公司开发及优化的.1997年SGI和微软公司一起将Open G L放入Windows2000中,VC++集成了Open G L图形标准,使得Open G L在三维图形设计领域得到广泛应用.目前,Open G L在图形开发领域已经成为工业标准,如何利用VC++和Open G L构建三维图形开发环境,是利用Open2 G L开发三维图形软件的前提和关键.1 Open G L及工作流程

Open G L是一个与硬件图形发生器的软件接口,也是一个高性能的图形开发软件包,它包括了100多个图形操作函数,程序设计者可以利用这些函数来构造景物模型、进行三维图形交互软件的开发.Open G L支持网络,在网络系统中

收稿日期:20051123

基金项目:山东省自然科学基金资助项目(2004ZX33)作者简介:王兰美(1956),女,教授.

用户可以在不同的图形终端上运行程序显示图形.Open G L 作为一个与硬件独立的图形接口,它不提供与硬件密切相关的设备操作函数,用户必须从点、线、面等最基本的图形单元开始构造自己的三维模型.因此,Open G L 的图形操作函数十分灵活.

几何顶点数据包括模型的顶点集、线集、多边形集,这些数据需经过运算器、逐个顶点操作等;图像数据包括像素集、影像集、位图集等,图像像素数据的处理方式与几何顶点数据的处理方式是不同的,但它们需经过光栅化、逐个片元处理,直至把最后的光栅数据写入帧缓冲器.在Open G L 中的所有数据包括几何顶点数据和像素数据都可以被存储在显示列表中或者立即得到处理.Open G L 中,显示列表技术是一项重要的技术[1].

Open G L 要求把所有的几何图形单元都用顶点来描述,因此,运算器和逐个顶点计算操作都可以针对每个顶点进行计算和操作,然后进行光栅化形成图形碎片.对于像素数据,其操作结果被存储在纹理组装用的内存中,经光栅化形成图形片元.

图形片元经过一系列的逐个片元操作,最后的像素值BZ 送入帧缓冲器实现图形的显示.Open G L 的基本工作流程如图1

[2]

所示

.

图1 Open G L 基本工作流程图

2 Windows N T 下Open G L 的结构

Open G L 的作用机制是客户(client )/服务器(server )机制,即客户(用Open G L 绘制景物的应

用程序)向服务器(即Open G L 内核)发布Open 2G L 命令,服务器则解释这些命令.大多数情况

下,客户和服务器在同一机器上运行.正是Open 2

G L 的这种客户/服务器机制,使得它可以十分方便地在网络环境下使用.因此,Windows N T 下的Open G L 是网络透明的.

正如Windows 的图形设备接口(GDI )把图形函数库封装在一个动态链接库(Windows N T 下的GDI32.DLL )内一样,Open G L 图形库也被封装在一个动态链接库内(Open G L32.DLL ).受

客户应用程序调用的Open G L 函数都先在Open 2G L32.DLL 中处理,然后传给服务器WINSRV.DLL.Open G L 的命令得到处理后直接传给Win32的设备驱动接口(Device Drive Interface ,DDI ),这样就把经过处理的图形命令送给视频显

示驱动程序,其过程如图2所示

.

图2 Open G L 在Windows N T 下的运行机制

3 VC ++与OpenG L 应用接口的建立

实现VC ++6.0和Open G L 之间图形接口

的机制是像素格式设置以及关联DC (Device Context )与RC (Rendering Context )[3].在创建一个渲染环境RC 之前,首先要设置像素格式,然后为Open G L 建立RC ,只有建立RC 后,Open G L 才能调用绘图原语在窗口中绘出图形.Win32A PI 提供了几个操作RC 的函数,包括建立、复制、使用、删除、查询等,它们都以wgl 为词头.RC 是以线程为单位的,每个线程必须使用一个RC 作为当前RC ,才能执行Open G L 绘图原语.VC ++6.0和Open G L 图形接口的实现步骤如

下:

首先建立一个新的VC ++Win32A PI ,然后设置连接Open G L 库文件,在菜单中选择Pro 2ject ->Settings ,最后选择L IN K 选项,在“Ob 2ject/Library Modules ”下增加Open G L 所需的库

程序,如Open G L32.lib ,Glu32.lib ,Glaux.lib [4].做完以上工作后,就可以编写Open G L 程序了.3.1 Include 文件及全局变量的设置

每个程序开始的4行包括了窗口及Open G L 所使用的库的头文件.程序代码如下:

7

3第4期 王兰美,等:Open G L 及其在VC ++开发环境下的编程实现

#include//视窗文件

#include//Open G L库文件的头文件

#include//G Lu32.lib的头文件

#include//Glaux.lib的头文件

接下来是定义在程序中计划使用的所有变量.程序代码如下:

H G L RC hRC=NULL;//定义渲染环境

HDC hDC=NULL;//私有的GDI设备环境

HWND hWnd=NULL;//得到窗口句柄

HINSTANCE hInstance;//得到程序的例子

第1行是建立一个渲染环境RC.每一个Open G L程序都会被链接到渲染环境,渲染环境的作用是将Open G L调用连结到设备环境,它被定义为hRC.第2行的任务是为程序在窗口中绘制的需要创建一个设备环境,窗口设备环境被定义为hDC.DC,它将窗口连结到图形设备接口(GDI),RC将Open G L连结到DC.在第3行中,参数hWnd将得到Windows分配给窗口的句柄(handle).第4行为建立一个程序的例子Instance (事件).

3.2 设置窗口大小、斜率及全屏标志变量

由于变量f ullscreen在全屏模式下值为TRU E,在窗口模式下值为FAL SE.因此,将其设置为全局变量是很重要的,这可使程序的每个过程和函数都知道程序是否运行在全屏模式.其代码如下:

REC T rect;

int sw=640;

int sh=480;

bool f ullscreen=1;

Glfloat aspect;

3.3 设置程序链接时所需要调用的Open G L程序

通过设置Open G L,可以灵活地切换Debug 模式及Release模式,而不用担心链接时由于没有设定Open G L程序库而出现错误信息.

程序代码如下:

#p ragma comment(lib,“opengl32.lib”)

#p ragma comment(lib,“glu32.lib”)

#p ragma comment(lib,“glaux.lib”)4 Open G L的绘制

下面通过一个实体透明处理的实例描述来说明Open G L的绘制方法.

创建好VC++与Open G L的应用接口以后,就可以进行编程了,其程序如下:

BOOL CTransparent::PreCreateWindow (CREA TESTRUC T&cs)//重载基类PreCreate2 Window函数

{

cs.style|=WS_CL IPSIBL IN GS|WS_ CL IPCH ILDREN;//设置窗口类型

ret urn Cview::PreCreateWindow(cs);

}

void CT ransparentView::OnDraw(CDC3pDC)

{

RenderScene();//渲染场景

}

//窗口必须设置以上属性,否则像素格式不能正确设置.

const DWORD Transparent_color= 0x7FFFFFFF;//设定透明值,0x7F代表50%透明void SceneShow(G L void)//这里进行所有的绘图工作

{

glClear(G L_COLOR_BU FFER_BIT|G L_ D EP T H_BU FFER_B IT);//清屏和清除深度缓冲区

glLoadIdentity();//重置当前Modelview矩阵

my_vertex g_Transparent[]={

{-1.0f,-1.0f,-1.0f,0.0f,0.0f, 0.0f,Transparent_color,0.0f,1.0f},//前面

{-1.0f,-1.0f,-1.0f,0.0f,0.0f, 0.0f,Transparent_color,0.0f,0.0f},

{1.0f,-1.0f,-1.0f,0.0f,0.0f,0. 0f,Transparent_color,1.0f,0.0f},

{1.0f,-1.0f,-1.0f,0.0f,0.0f,0. 0f,Transparent_color,1.0f,0.0f},

{1.0f,-1.0f,-1.0f,0.0f,0.0f,0. 0f,Transparent_color,1.0f,1.0f},

(下转第42页)

4 结束语

计算机技术不断发展和普及,为微电子企业质量管理技术和方法的应用提供了崭新的数据分析和处理的手段.计算机辅助控制图的应用,使控制图的设计、描点和准则判断准确、方便、直观和快捷.质量控制图系统建立在SPC和控制图理论的基础上,并运用计算机软件技术实现.电子产品制造中运用质量控制图系统,可以根据对检测数据自动绘制控制图,分析加工过程的异常,以达到降低不良率、减少返工和浪费、改进与保证产品质量的目的.随着国内电子组装制造业对统计过程控制重要性认识,实时控制图技术会被越来越广泛地应用于企业生产中,从而推动电子产品制造工艺技术和管理技术的进步.

参考文献:

[1]孙 静,张公绪.常规控制图标准及其应用[M].北京:中国

标准出版社,2001.

[2]张根保.现代质量工程[M].北京:机械工业出版社,2000.

[3]黄晓兰.统计过程控制技术在半导体生产中的应用[J].电子

标准化与质量,1999,(3):15218.

[4]徐 哲,段晓江.计算机辅助质量控制图的应用[J].北京航

空航天大学学报,1999,25(2):2122215.

(上接第38页)

{-1.0f,-1.0f,-1.0f,0.0f,0.0f,0.0f,

Transparent_color,0.0f,1.0f},

//其它5个面的绘制与此类似.

ret urn TRU E;//程序运行正确

}

//程序设计者可以在glLoadIdentity()之下并且在TRU E值之前增加创建基本形体的Open G L代码.

//在Open G L程序结束之前关闭Open G L,代码如下:

void DisableOpen G L()

{

wglMakeCurrent(NULL,NULL);

wglDeleteContex(hRC);

图形开发软件包.ReleaseDC(hWnd, hDC);

}

透明处理后的效果图与原图对比如图3所示.

图3 立方体透明处理前后的对比图5 结束语

以上阐述了Open G L的工作流程及其在VC++环境下的编程实现步骤,并通过实例展示了其仿真功能.利用这个强大的开放式图形库可以开发出绚烂的三维图形世界及逼真的三维动画.

参考文献:

[1]廖朵朵,张华军.Open G L三维图形程序设计[M].北京:星

球地图出版社,2004.

[2]李文强,华祖耀.基于Open G L的仿真可视化技术研究[J].

计算机仿真,2005,6:1582161.

[3]李长春,戴国洪.基于VC++与Open G L的三维图形环境

的构建[J].电脑开发与应用,2004,17(6):10213.

[4]万 斌.Visual C++Open G L Direct X三维动画编程宝典

[M].北京:北京希望电子出版社,2003.

相关主题
文本预览
相关文档 最新文档