OpenGL开发之旅.NET平台配置

  上一篇文章给大家介绍了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,谢谢。

  

  完毕。^_^

  

posted @ 2012-06-12 16:59 Healtheon 阅读(...) 评论(...) 编辑 收藏