在VS2008中开发和移动OpenGl程序的方法*

2014-06-07 06:00仲兰芬
阴山学刊(自然科学版) 2014年1期
关键词:绘图绘制程序

仲兰芬

(包头师范学院数学科学学院,内蒙古包头014030)

在VS2008中开发和移动OpenGl程序的方法*

仲兰芬

(包头师范学院数学科学学院,内蒙古包头014030)

以VS2008为例,说明了.NET环境下使用OpenGL开发应用程序的技术方法,并进一步说明了如何通过控件PictureBox简化程序界面设计。还介绍了如何将VC++环境下的OpenGL程序移动到.NET坏境下的方法和注意事项。

OpenGL;.NET;csgl动态链接库文件;绘制环境

1 概述

OpenGL(Open Graphics Library)是图形硬件的一个软件接口,是一种快速、高质量的3D图形软件。它提供了近120个绘制点、线和多边形等3D图形的命令,可以完成绘制物体、变换、光照处理、着色、反走样、融合、雾化、位图和图像、纹理映射、动画等基本操作,通过把这一系列基本操作进行组合,可以构造更复杂的3D物体和描绘丰富多彩、千变万化的客观世界[1]。在C++环境中实现OpenGL的技术已经非常成熟,其中OpenGL与Visual C++6.0结合的开发比较多。.NET系列的开发平台具有语法更加简洁,调试更加容易,且应用程序开发更加快速,尤其是界面设计较Visual C++6.0更丰富,高效,简单的特点。而在.NET framework中没有提供Open-GL API的接口,在文献[1][2]中叙述了.NET环境下利用OpenGL库开发程序的基本步骤和方法。本文以Visual Studio C#2008.net(VS2008)开发平台为例,更加详细说明了使用OpenGL API的技术方法,并介绍将Visual C++6.0(VS6.0)平台下的利用OpenGL图形库开发的程序移植到.NET平台下的方法,方便开发人员升级程序。

2 开发基本方法

2.1 建立对OpenGL库的引用

在.Net framework中没有提供OpenGL ApI托管接口,第三方软件CSGL[3]提供了新的OpenGL动态链接库文件csgl-opengl.dll(包括csgl.dll和csglnative.dll两个文件),在C#中通过调用这个文件,就可以实现OpenGL所提供的强大的图形绘制功能。CSGL的下载地址http://sourceforge.net/projects/csgl/files/,相关内容的中文的学习网站有http:// blog.sina.com.cn/s/blog_4b94ff130100evua.html等。下载后把csgl-opengl.dll复制到c:windowssystem32下,在Microsoft Visual Studio C#2008中建立一个Windows应用程序项目,在该项目Reference里将csgl-opengl.dll添加引用。在将要建立的程序命名空间中添加using CsGL.OpenGL后就完成对OpenGL库的引用,可以使用库中的函数进行绘图了。

2.2 初始化OPenGL绘图环境

在VS2008中生成一个Windows应用程序时,应用程序向导会生成表单类(Form1),该表单类窗体就是应用程序的绘制表面,但是由于OpenGL需要使用自己的特殊绘制环境,所以还需要生成一个绘制环境类。该类需从CsGL.OpenGL.OpenGLControl类派生,因为OpenGLControl类中定义了设备初始化函数InitGLContext、场景绘制函数glDraw、双缓存交换函数SwapBuffers以及窗口大小改变时的重绘函数OnSizeChanged等初始化函数,详细的设计步骤可参阅文献[1,2,3],在此补充屏幕刷新和键盘控制的内容。

在VS2008中建立Windows应用程序,并自定义类OpenglView类,基类为CsGL.OpenGL.OpenGLControl,用于建立OpenGL绘图环境。除了使用函数InitGLContext、glDraw和OnSizeChanged完成绘制环境的初始化外[2],使用下面的方法实现窗口刷新和键盘控制。

屏幕刷新方法:

(1)在OpenglView类中创建一个窗口重绘计时器对象:

(2)在OpenglView类的构造函数中初始化计时器:

(3)创建窗口重绘计时器回调函数,每10ms刷新一次OpenGL窗口。

键盘控制方法:

(1)在OpenglView类中创建按键响应回调函数。

(2)修改表单属性Form1.KeyPreview=TRUE,确定窗体上的键盘控件事件已经向窗体注册。并初始化窗体键盘事件的回调函数,代码如下。

2.3 简化界面设计

在Visual C++6.0环境下开发程序的人共有的经验是该平台的界面设计较复杂,再加上OpenGL API的使用有其特殊的绘制环境要求,比如,要求特殊的像素格式、渲染上下文和双缓存机制等,使得程序员将过多的精力放在界面设计和OpenGL绘图环境的创建上,从而产生使用OpenGL API很困难的感觉。

图1:使用PictureBox作为显示表面

在CsGL.OpenGL.OpenGLControl类中定义了创建绘制环境的函数,一般无需重写这个函数就能够完成OpenGL绘制环境的创建任务,所以在VS2008平台上仅需要考虑如何初始化绘制环境[参见本文2.2]。另外该平台界面设计简单,所见即所得,可大大提高开发效率。需要注意的是:一般不直接使用OpenglView类中的Form1对象作为绘制表面,而是在Form1上添加PictureBox作为OpenGL绘制环境的绘制表面,这样方便多样化界面的设计。例如图1,在Form1上添加控件PicturBox(pictureBox1)和Button(button1)后,设计button1的单击事件代码如下:

图2为作者设计的一个软件界面图,表单中创建了3个PictureBox控件,作为OpenGL的绘制表面。

图2:使用多个PictureBox的界面

3 移动已有程序方法

将在VS6.0下开发的程序移动到VS2008的平台上修改的话,需要注意的问题有三个方面。首先对OpenGL绘图环境的设置需要“对号入座”,并且对CsGL.OpenGL.OpenGLControl已经完成的初始化部分不再重复设置。还有就是需要将所有调用的OpenGL函数名和常量参数前要添加GL进行限定[1]。最后,就是由于C#的类型检查机制严格,需要修改VS6.0下代码中使用指针的内容。以下以VS6.0中基于单文档的OpenGL程序为例详细说明代码的移动过程。如图3。

图3:代码移动

在单文档中绘制OpenGL图形,需要在单文档窗口的创建过程中设置OpenGL要求的像素格式,窗口属性风格和设备描述表,及在单文档视图类函数OnCreate()(图3①)中完成创建OpenGL绘图设备环境的工作。在VS2008中在CsGL.OpenGL. OpenGLControl类中定义了创建绘图环境的函数,所以OnCreate()中的代码无需移动。需要移动的就是绘制环境初始化和绘制代码。对于灯光、材质和纹理等(图3④)的初始化可移动到OpenglView.Init-GLContext()函数;对于窗口缩放时图形变换的设置及单文档视图类OnSize()(图3③)函数中的代码可移动到OpenglView.OnSizeChanged()函数中;单文档视图类OnDraw()(图3②)中绘图代码对应移动到OpenglView.glDraw()中。

4 总结

以上介绍了VS2008平台上使用OpenGL图形库开发程序的技术方法,和将已有的VS6.0平台下的OpenGL程序移动到VS2008平台的基本方法和注意事项。基于C#语言和VS2008平台的优良特性,OpenGL命令的使用将更为简洁和高效。

[1]王家华,李宪.C#开发OpenGL的图形绘制方法研究[J].现代电子技术,2007,24.

[2]高明向,陈定.OpenGL建模技术在C#中的实现[J].武汉理工大学学报,2005,7(1):65-68.

[3]潘敏,何宗斌.在C#中结合OpenGL实现MIT-MTT套损检测三维成像软件开发[J].计算机光盘软件与应用,2013,6.

Programing and Transplanting Programs with VS2008 and OpenGL

ZHONG Lan-Fen
(Department of Mathematics,Baotou Teachers College;Baotou 014030)

We illustrate how to program with.NET and OpenGL,and how to simplify a software interface designing with the PictureBox being added in the interface,als show the method about transplanting a program form VC+ +programing enviroment to.NET envirmment All sample programs in this paper is edited on VS2008.

OpenGL;NET;csgl Dynamic_link library file;Device Context

TP311

A

1004-1869(2014)01-0040-04

2013-12-17

内蒙古自治区自然科学基金项目(2011MS0901);内蒙古高等学校科学研究项目(NJZZ11142,NJZY12113)

仲兰芬(1975-),女,内蒙古巴彦淖尔人,硕士,副教授,研究方向:计算机图形学。

猜你喜欢
绘图绘制程序
来自河流的你
“禾下乘凉图”绘图人
超萌小鹿课程表
试论我国未决羁押程序的立法完善
垂涎三尺
放学后
“程序猿”的生活什么样
英国与欧盟正式启动“离婚”程序程序
创卫暗访程序有待改进
在转变中绘制新蓝图