C#中使用OpenGL:(一)前面的话

为什么要在C#中使用OpenGL?

OpenGL是非常强大的图形接口,硬件加速,跨平台。。。。总之,很多说不完的优点。对于喜欢图形编程的人来说,最直接的优点就是OpenGL可以做很多酷酷的东西。正是因为如此,包括我在内,很多人都喜欢使用OpenGL开发图形类的程序。OpenGL缺点也是很明显的,对于程序员来说,最直观的缺点就是学起来难,用起来繁。难学只是暂时的,繁琐则是始终的。OpenGL据说是用C语言开发的,因此与C语言最亲,相信大多数人开发OpenGL程序都是C语言写的。C语言的优点当然也一大堆,可是对于懒人来说,代码量也忒多了。很多人都有这样经历,用OpenGL开发一个很简单的程序,代码一大把,错误一箩筐。关键是,这个还特别单调,只有一个窗口,连个菜单都没有。如果要开发炫酷的界面,无论是用原始的winAPI,还是MFC类库,上千行的代码肯定少不了。我觉得我特别懒,看见密密麻麻的代码,莫名其妙头就疼。因此,自始至终,我都在考虑着如何更方便地使用OpenGL。

一次失败的探索

由于项目的需要,我学习了C#语言,感觉这语言还不错,开发界面真是又快又好。那时,我心里萌生一个想法:如果用C#开发界面,用OpenGL来画图,岂不是优势互补?基于此,我查了很多资料,发现C#并不支持OpenGL,而OpenGL官方有没有为C#开发相应的版本,心里各种不爽,把微软骂了一千遍。虽然微软与OpenGL这两个死对头,没有为C#语言开发OpenGL提供便利,但是民间有很多人为此做出了很多努力。第三方的库,比如CsOpenGL,CsharpGL…..等一系列专门为C#准备的OpenGL库,这让我又重新燃起了希望。可是现实却是很悲惨,在网上找了很多C#版的OpenGL,据说可以在C#中很好地使用,实际却是无一例外地用不了。搞了好久也不知原因所在,可能是电脑的问题,可能是我还有什么地方没做对,反正就是用不了。最后心灰意冷,内心里说了句“在C#中使用OpenGL可能效率也不高吧”,算是作为自己的失败的托词。

我要做自己的C#版OpenGL

本来我已经决定放弃在C#中使用OpenGL,毕竟C语言也挺好的,都用了好些年了。一次偶然的学习,让我看到了开发C#版本OpenGL框架的点点希望。经过一些初步的实验,感觉自己将C语言版本的OpenGL移植到C#中是完全有可能的,因此我决定自己做一个框架。
那次偶然的学习,说来也很尴尬。有一次,我接了一个活,对方要求在窗口上贴上一张图,用作程序启动界面,要求两个小时内完成。我那时就想,太简单了吧,贴图我都贴了无数次了,半个小时完成妥妥的。可是,我用足了两个个小时,竟然都没有成功,最后狠狠把客户给坑了。后来我查找原因,发现在自己编写的程序中,贴图没问题,而在客户那个程序中,贴图是有问题的。百思不得其解,我怀疑我对OpenGL还有很多不懂得地方,于是我开始学习OpenGL底层的东西,又花了一段时间学习winAPI。通过学习,我发现了OpenGL与winAPI的联系,这让我找到了在C#中使用OpenGL的方法。OpenGL只是专注于绘图,而不管如何创建窗口。换句话说,OpenGL只是提供了绘图的方法,而没有提供绘图所必须的画笔、画布、画板,这些等绘图工具是由winAPI提供的。使用OpenGL绘图,必须要有RC(Render Context 着色描述表),要创建RC,必须要有DC(Device Context设备描述表),要创建DC,必须要有窗口句柄。问题已经很明朗了,如果要在C#中某个控件上使用OpenGL绘制图形,就要设法取得控件的句柄,这应该是很简单的事。

工作安排

要在C#中使用OpenGL也许不算太难,如果要开发一个框架的话,还是要好好计划计划的。
1、首先,定义C#版本的OpenGL函数接口;
2、其次,为C#版本的OpenGL接口添加注释;
3、再次,开发一些实用的C#类、方法,方便使用OpenGL;
4、最后,用C#版本的OpenGL接口写一些demo。

结语

我必须承认,不管是对于OpenGL,还是对于C#,我都谈不上精通,最多也只能说是熟练。对于开发C#的OpenGL框架这样的事,都是大神在做,我很羡慕他们能做这样的事。我也要做一次尝试,不管成功与否,这都将提升我的能力。我将把开发的过程写在博客上,如果对他人有所帮助,有所启发,那就太好了。由于文章会比较长,所以分开好多篇写,这篇算是一个介绍,不是项目真正的开始。如果有兴趣,可以关注后续的博文。

下一篇:C#中使用OpenGL:(二)C#调用C/C++的dll

阅读更多

没有更多推荐了,返回首页