上一篇文章给大家介绍了OpenGL开发的基础知识,本文介绍如何在.NET平台中配置和开发OpenGL程序。
在介绍.NET平台中配置之前,我想先给大家介绍下如何在VC6.0的环境中配置,因为我使用时是使用VC6.0作为开发环境的,而且VC6.0在Windows中地位,你懂的。
开发OpenGL程序主流的环境是Visual Studio,Broland C++ Builder和VC6.0开发环境,下面是VC6.0中配置方法。
1. VC6.0配置
Windows环境下的配置文件下载地址:/Files/hanyonglu/OpenGL/OpenGL.rar
下载文件后将其解压,找到VC6.0安装的地址,我的VC6.0安装地址是:d:\Program Files\Microsoft Visual Studio\VC98\include\
(1) 在include文件夹下查看是否存在名字为"gl"的文件夹,如果不存在则直接创建。将解压后的GLUT.H文件复制到gl文件夹下。
(2) 将解压后的glut.lib和glut32.lib两个文件放到静态函数库所在文件夹,即放在d:\Program Files\Microsoft Visual Studio\VC98\lib目录下。
(3) 将解压得到的glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内,即放在C:\Windows\System32目录下。
然后我们需要打开VC6.0创建一个工程,创建时需要创建一个Win32 Console Application,在这里也需要进行相应的设置:
(1) 链接OpenGL libraries:在Visual C++中先单击Project,再单击Settings,再找到Link单击,最后在Object/library modules 的最前面加上opengl32.lib Glut32.lib Glaux.lib glu32.lib。
(2) 单击Project Settings中的C/C++标签,将Preprocessor definitions 中的_CONSOLE改为__WINDOWS。最后单击确定。
(3) 需要引入头文件:#include <gl/glut.h>
这样,VC6.0中的配置完毕,我们就可以使用VC6.0开始我们的OpenGL开发之旅。
2. Visual Studio2010配置
接下来让我们看下.NET平台中的配置。在.NET中进行OpenGL程序的开发,给我们.NET开发人员带来了不少的便利,我们不必去使用VC6.0环境仍然可以做出很炫的图形程序。
就.NET开发OpenGL程序而言,目前我知道有几种解决方案,大多是使用第三方库,以下给大家介绍几种。
第一种解决方案:直接调用OpenGL函数库
使用这种方案是我们可以使用C#调用OPENGL32.DLL、GLU32.DLL以及GLUT32.DLL类库,即是使用如下代码格式直接调用:
//OpenGL常量声明 public const uint GL_COLOR_ BUFFER_ BIT = 0x0004; public const uint GL_MODELVIEW = 0x1700; public const uint GL_PROJECTION =0x1701; //函数入口声明 [DllImport("opengl32.dll")] public static extern void glClear(uint mask); [DllImport("opengl32.dll")] public static extern void glBegin(uint mode); [DllImport("opengl32.dll")] public static extern void glEnd();
在OpenGL中的函数多达几百个,如果我们使用这样的方式编写OpenGL程序,实在是繁锁,所以这种方案在.NET中使用得特别少。关于这个方案大家了解就行,不必使用。
第二种解决方案:使用SharpGL扩展库
SharpGL是一个能让我们很轻松的在Windows窗体中和WPF中使用OpenGL的扩展库,它能够设置一个强大的场景图和Visual Studio模板。我们使用它很容易开发出3D图形程序或将代码移植到其它的平台中。
它是一个让.NET开发人员兴奋的扩展库,让我们简要看一下使用它开发出的一些优秀图形程序效果图,如下所示:
上图是径向模糊示例,显示了如何创建先进的灯光效果。
这是一个犹他茶壶的WPF示例。直接使用OpenGL渲染一个WPF应用程序。SharpGL OpenGLControl提供了一个直接在您的应用程序的OpenGL渲染表面。
这是一个纹理效果示例,使用该扩展库可以加速开发OpenGL像这样的纹理功能,用于加载和转换成OpenGL纹理的图像数据。
这是一个撞击测试示例。
以上是使用SharpGL开发出的一些图形示例。那么SharpGL包含哪些功能呢?
SharpGL是一个扩展库,能让我们在代码中使用OpenGL功能的集合。命名空间包括:
(1) SharpGL: 包含OpenGL的主要对象,这个对象封装了所有的OpenGL函数,枚举和扩展。
(2) SharpGL.SceneGraph: 包含所有包装OpenGL的对象和场景中的元素-灯光,材料,纹理,材质等。
(3) SharpGL.WinForms: 为我们的应用程序包含Windows窗体控件。
(4) SharpGL.WPF: 为我们的应用程序包含WPF控件。
(5) SharpGL.Serialization: 包含用于装载几何和来自于3D Studio Max文件的数据、不引人注意的obj文件和trueSpace文件的类。
在这些扩展库中,SharpGL包装了所有当前的OpenGL函数,所有主要的扩展和一套丰富的先进功能的对象。我们可以使用SharpGL的执行传统的OpenGL绘图,也可以使用场景图以实现更多的应用程序的具体任务。
既然SharpGL是那么优秀的一个扩展库,我们该如何使用SharpGL去开发我们的OpenGL程序呢?
如果我们看到了C语言实现的OpenGL程序代码,例如下面的代码:
// 设置线的宽度和点大小 glLineWidth(3.0f); glPointSize(2.0f);
那么我们就可以在.NET中按如下代码方式使用SharpGL:
// 获取一个OpenGL对象的引用 OpenGL gl = openGLCtrl1.OpenGL; // 设置线和的宽度和点大小 gl.LineWidth(3.0f); gl.PointSize(2.0f);
SharpGL中的函数去掉了gl和glu,去掉gl和glu开头的函数和原来是一样的。
一般的规则是这样,但是也有一些例外的,比如像这样的代码:
// 设置颜色 glColor3f(0.5f, 0.5f, 0.5f); glVertex3f(2.0f, 3.0f 4.0f); glVertex4f(2.0f, 1.0f, 10.0f, 1.0f);
使用SharpGL时则需要写成如下格式:
// 设置颜色 gl.Color3(0.5f, 0.5f, 0.5f); // Output some vertices. gl.Vertex3(2.0f, 3.0f 4.0f); gl.Vertex4(2.0f, 1.0f, 10.0f, 1.0f);
看到带有参数的代码时,如下:
// 设置多边形模式. glPolygonMode(GL_FRONT, GL_FILL);
使用SharpGL时则需要写成如下格式:
// 设置多边形模式 gl.PolygonMode(OpenGL.GL_FRONT, OpenGL.GL_FILL);
或者是如下格式:
// 设置多边形模式 gl.PolygonMode(PolygonFace.Front, PolygonMode.Fill);
OpenGL中的常量都被定义成SharpGL.OpenGL类中的成员,并且和原来的常量有相同的名字。
这样做的目的是为了兼容标准C语言写的OpenGL代码。
通过一些简单的描述,我们大家大概知道了如何在.NET里编写代码,但是怎么在Visual Studio里创建这样的项目呢?如何搭建这样的框架呢?
首先我们需要下载扩展库,然后直接双击安装它。扩展库下载地址如下:
扩展库下载地址: 点击下载
下载后解压并双击SharpGL.vsix,我们将会看到如下安装界面:
安装完毕后,打开我们的Visual Studio(以我个人为例,我用的是Visual Studio2010)并新建项目,我们将会看到多了两个新的项目模板,如下图所示:
选择Sharp Windows Forms Application项目,点击确定后,将会创建一个默认的程序,运行效果是一个旋转的金字塔,如下图所示:
同样的道理,选择SharpGL WPF Application项目,将会创建一个默认的WPF版的程序,运行效果同上。
这个扩展库感觉不错,因为他可能很容易将VC6.0环境中的图形程序移植过来,有兴趣的朋友可以使用。
第三种解决方案:使用CsGL库
CsGL库也是一个非常不错的库,有关这个库的详细信息有兴趣的朋友可以查看:http://csgl.sourceforge.net/index.html
CsGL提供了两个关键的dll:csgl.dll和csgl.native.dll,使用前需要将这两个dll复制到C:\Windows\System32目录下并在程序中实现引用。
在程序代码中需要添加命名空间:using CsGL.OpenGL;
CsGL库下载:/Files/hanyonglu/OpenGL/csgl.1.4.1.dll.zip
CsGL文档下载:/Files/hanyonglu/OpenGL/csgl.1.4.1.doc.zip
CsGL的使用还是挺多的,关于CsGL库的详细信息不再细述,有兴趣的朋友直接查看官方文档。
第四种解决方案:使用OpenTK框架
OpenTK是对OpenGL、OpanAL、OpenCL的跨平台的封装,可以运行在Windows、Linux 以及MacOSX 平台上,任何.Net 语言都可以使用它做开发我们的图形程序,很容易集成到我们Windows Forms、WPF或其他的程序中。
关于OpenTK项目的地址:http://sourceforge.net/projects/opentk/files/opentk/nightly/
上面提供了一些源码示例,如果有过OpenGL开发经验的朋友很容易就能读懂这些源码,有兴趣的朋友可以研究下。
第五种解决方案:使用Tao框架
Tao框架也是C#使用OpenGL库的一种方式,Tao框架中封装了许多的C库,使得我们在C#中使用这些库函数比较容易。Tao框架还绑定了Mono,所以可以在Linux和MacOSX中使用。
除了封装OpenGL库以外,Tao框架还还封装了其它的库,如下图所示:
Tao框架中提供了许多有用的库,这些库在实际中有很的应用示例,不但可以编写非常出色的图形程序,也可编写其它的程序。
下载地址:/Files/hanyonglu/OpenGL/Executable.rar
第六种解决方案:使用CSopenGL库
关于该库的信息,有兴趣的朋友可以到网上搜索下,这里不再详述,这个库使用得不多。
库下载地址:/Files/hanyonglu/OpenGL/dll.rar
以上就是关于在.NET平台下开发OpenGL程序的解决方案和配置方法,方便我们.NET开发人员开发图形程序。
最后,希望转载的朋友能够尊重作者的劳动成果,加上转载地址:http://www.cnblogs.com/hanyonglu/archive/2012/06/12/2546581.html,谢谢。
完毕。^_^