OpenGL的2个.Net版本

一个是官方的版本,即csgl,当前版本是:1.4.1.0,包括两个dll,csgl.dll和csgl.native.dll,其中csgl.dll是.NET的程序集,提供OpenGL类和实用包;csgl.native.dl不是.NET的程序集,而是普通的dll,为CsGL做一些本地和私有工作,比如CsGL.OSLib类型初始值的设定。因此,可以看到这两个dll都很重要,必须将其拷贝到当前程序的执行目录下,其实最简单的方法就是将这两个dll直接拷贝到系统目录下,即:C:/WINDOWS/system32目录下,这样一劳永逸,不用在每个程序的执行目录下存放副本。

  另外,在NeHe的教程里看到CsGL.Basecode.dll,经过研究,这个是为了快速开发,为这个版本的csgl的应用程序的开发提供的一个模板,并写成了.NET程序集,名称为CsGL.Basecode.dll,当前版本为1.0.0.0,在开发应用程序的时候使用CsGL.Basecode.dll,开发者只要关注自己的场景绘制,输入输出控制等工作,不用关心渲染窗体创建,消息传递等工作,而且关于渲染的流程都封装好了,开发者只需要继承Model类并重写几个方法,相当简单,其实这个可以称作为框架,在Direct3D中,也有DXUT,这个就是微软给用户提供的一个框架,快速开发,用户所要做的就是提供一些回调函数,并把这些回调函数注册到框架中。不管是CsGL.Basecode.dll,还是DXUT,都极大地方便了开发者开发,让开发者专注于核心工作。

 

 第二个版本是Mono项目中,Randy开发的Tao.OpenGl,当前版本是2.1.0.4,它提供了三个dll,Tao.OpenGl.dll,Tao.Platform.Windows.dll,和Tao.FreeGlut.dll。开发应用程序的时候,只需要添加这三引用就可以,也是相当的方便。既然在.Net版本中,共有三种选择策略:单纯的csgl,使用CsGL.Basecode.dll的csgl以及Tao.OpenGl,那么选择那种比较好哪?其实本身上这三种都是对OpenGL的封装,只是封装程度有高有低,所以根据自己的熟悉程度来选择,即可。不过要说明的是:后两种方法易于快速开发。

 

 1:使用单纯的csgl开发流程:

声明一个自定义的Control,用作渲染面板。

public class OurView: OpenGLControl

{

protected override void InitGLContext()  使能渲染状态,设置渲染参数。

protected override void OnSizeChanged(EventArgs e)  调整窗口,重新设置投影,模型视窗。

public override void glDraw( ) 场景绘制、渲染。也可以自定义,而不重载。

}

定义主窗体和程序入口点Main函数

public class MainForm : System.Windows.Forms.Form    

{

    private OurView view;声明一个我们定义的OurView渲染面板的对象。

    public MainForm()

    {

        this.view = new lesson05.OurView();                

        this.view.Parent = this;

        this.view.Dock = DockStyle.Fill;

        this.Show();  不要忘记将创建的form显示出来。

     }

    static void Main()

    {

        MainForm form = new MainForm();

        while (!form.IsDisposed)                          

        {

            form.view.glDraw(); 

            form.Refresh();

            Application.DoEvents();

        }

        form.Dispose();

     }

}

 

2:基于CsGL.Basecode.dll的csgl应用程序开发流程

声明一个自定义的Model,这里是称作MiscPongMania,用控制渲染。

public sealed class MiscPongMania : Model

{

       public override void Initialize()  可选

       public override void Draw()   必须重载。

       public override void InputHelp()  可选

       public override void ProcessInput() 可选

}

定义主窗体和程序入口点Main函数

public static void Main()

{                                                                                 

App.Run(new MiscPongMania()); 使用程序集CsGL.Basecode.dll中的类App 的静态方法Run来运行我们刚才定义的Model的实例。

}

 

3:Tao.OpenGl进行应用程序开发的流程

public partial class Form1 : Form

{

       //定义一个用户渲染的窗口:simpleOpenGlControl1

      private Tao.Platform.Windows.SimpleOpenGlControl  simpleOpenGlControl1;

       public Form1()

    {

        this.simpleOpenGlControl1.Dock =  System.Windows.Forms.DockStyle.Fill;

    }

       private void simpleOpenGlControl1_Load(object sender, EventArgs e)  A

private void simpleOpenGlControl1_SizeChanged(object sender, EventArgs e)  B

public override void Draw()  也可以自定义,而不重载;

private void Form1_Load(object sender, EventArgs e)

{

simpleOpenGlControl1.InitializeContexts();

simpleOpenGlControl1.SwapBuffers();

simpleOpenGlControl1.Load+=new EventHandler(A); A为上面函数的名字

simpleOpenGlControl1.SizeChanged +=new EventHandler(B); 同上

 

注册鼠标、键盘事件。

#region mouse and key handles

#endregion

}

static void Main()

{

     Application.EnableVisualStyles();

     Application.SetCompatibleTextRenderingDefault(false);

     Application.Run(new Form1());

}

}

从以上代码流程可以看出:第三种方式最简捷,最方便,开发者只需要专心关注自己的场景构建和输入输出处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值