zoukankan      html  css  js  c++  java
  • 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,谢谢。

      

      完毕。^_^

      

  • 相关阅读:
    WEB 应用缓存解析以及使用 Redis 实现分布式缓存
    MVC 架构模式
    用两个栈实现队列
    重建二叉树
    从尾到头打印链表
    替换空格
    二维数组中的查找
    二叉树与线索二叉树
    OpenYurt:延伸原生 Kubernetes 到边缘场景下的落地实践
    开放下载!解锁 Serverless 从入门到实战大“橙”就
  • 原文地址:https://www.cnblogs.com/hanyonglu/p/2546581.html
Copyright © 2011-2022 走看看