欢迎大家光临C图形编程专区,我是版主一笔苍穹,在这里我们将一起讨论那些与C图形编程有关的话题。
我现在还清楚的记得我刚学C语言的那会儿,那个时候我用的编译环境是Turbo C,相信这个东东大家都不会陌生——Borland出品的一个很古老很经典的编译环境,现在许多初学者也还在用着它,不为别的,只因为基于这个编译环境的教程和资料特别多,初学者很容易上手。大家在刚学的时候可能都会有我当时的那种经历:趴在键盘上对着教材敲了许久,然后又是查错又是修改捣鼓了半天,最后好容易才在黑乎乎的屏幕上跳出诸如”Hello world!”几个字母,一开始还很兴奋,可一到后来就越发觉得无聊,因为捣鼓来捣鼓去的最后也只是一块黑乎乎的屏幕上显示几行字(在Windows下则也许是弹出一个DOS虚拟窗口),而且还不能显示汉字,更别说显示图片什么的了,没劲,再一看人家的游戏甭管商业的业余的花花绿绿的多有意思,是吧?我也不是说所有学编程的朋友都和我一样有这种想法,但相信有相当一部分的确是这样的。我当时就是在这种思想的驱动下,一步一步走进了图形编程的世界。
也是基于这个想法,我们开了这个专区,就是用来和对这方面有兴趣的朋友们交流讨论有关图形编程的各种问题。性急的朋友可能这会就要问了:我想用C语言写个RPG游戏应该怎么做?呵呵,做个好一些的游戏不是一天两天的功夫,也不是一两句话能够说的清的,我的这篇也只是介绍性的帖子,而不是技术性的帖子。我开这个帖子,是为了让大家粗略了解自己目前正在使用的编译环境如何搭建到可以开发图形程序,而不是直接讨论如何显示一幅位图或者制作一个游戏。
好了,废话了这么多,咱们言归正传吧,首先我们来看看初学者常用的Turbo C(以下简称TC)环境下应该如何编写图形程序:
在TC下,你至少可以使用它自带的Graphics库来写出一些基本的图形程序,说基本是因为你只利用它能绘制一些基本的几何图形,譬如圆啊线啊什么的,显示位图汉字什么的则是力不从心了,由于它是系统自带的,使用非常方便,所以许多朋友都用它来写一些简单界面的图形程序,对这个库本身我没更多要说的了,因为网上已经有N多的教程源码,我只提醒初哥们一句:记得把驱动文件Egavga.bgi(当然也可能是其它的)放在你的程序工作目录下,否则程序是无法执行的。另外值得一提的是这个库后来还放出了许多扩展驱动,譬如Svga256.bgi和Svga64K.bgi,也许你已经猜到了:前者是256色驱动,后者是高彩(65536色)驱动,这些驱动让你的程序能支持相应的色深,这很有吸引力,因为默认的Egavga.bgi根本办不到。要使用扩展驱动的过程和原来差不多,但你还必须用installuserdriver()函数安装这个驱动。
即使有了扩展库,也还是有美中不足的地方,就是库函数的功能并未增多,你仍然只能画画线或框什么的,当然如果你对位图格式足够了解的话你也可以将图片有画点函数一点点的画在屏幕上,但这会相当的慢,因为扩展驱动的性能原本就不好,如此一来你会看到一张图片像在屏幕上慢慢展开一样。我曾经也尝试过在扩展驱动的基础上写一组功能更强的函数,我写出来了甚至还给它命名为Lizard,但就是因为性能的问题我把它封闭在备份包中了。
也许上面的介绍会让你灰心丧气,其实大可不必,由于用TC的人很多,所以早就有许多“第三方”开发的图形函数库了,譬如TC256,NEO SDK,Graphics++,SVGACC等等诸多图形库。下面我选几个有代表性的介绍一下。
开始不得不提一下TC256,他是由WIN-TC的作者吴进和Cattom合作开发的,有以下特点:包括256色色深下的基本绘图功能、支持鼠标事件处理、位图、汉字显示,Alpha透明和精灵动画等。由于整个库是基于扩充内存EMS的,所以性能非常不错并支持双缓冲机制。不过也正是由于它EMS特性,造成了它目前的兼容性困惑,它无法工作在DDR内存的机器上(吴进的原话),而现在老式的SDR内存已经很少了,再加上只支持640X480分辨率的限制,以至于TC256到现在通常都是被大家下载下来研究它的源代码了。不过它还有一个基于扩展内存XMS的非发布版本在我这里,Cattom的意思是让我将其融合到NEO SDK中,但由于时间问题我一直没做这件事,在这时里我要为我的食言向他道歉。这个库你可以直接下载:
然后要介绍的是
Graphics++,网友陈凯以及他的工作室的一个作品。顾名思义,这是
Graphics库的一个扩充版本,以支持更多的图形功能,其运作原理正是我们刚刚讲到的使用扩展驱动,这个库与原来
Graphics结合的很好,而且在原来的基础上增加了调色板管理、位图显示、汉字显示、
Alpha透明、时钟机制、音频播放等功能函数,我个人认为这很好,因为大量的原来基于
Graphics库的程序都能经过少许修改就能采用这些扩充功能。但是前面已经说的到性能问题再次被引发,引用作者本人的话是“由于底层是采用的
Graphics库,速度方面的缺憾是无法避免的”。陈凯的工作室网站是:
http://rockcarry.home.sunbo.net。
最后要说的是NEO SDK,这是我之前的一个作品,我在2004年发布了它的首个版本,之后历经14个版本的更新,最后的版本是V2.1.90 Revise。由于更新的频率较高,所以它的功能也比较完善成熟,主要包括:支持各种标准及ModeX分辨率、支持8位(256色)/15位/16位(高彩)色深、提供强大的调色板管理功能、支持位图/汉字/图标显示机制、鼠标、时钟、换页、滚屏机制、Graphics库兼容接口、多种显示特效及Alpha透明、WAV文件播放等等。并且兼容TC、TC++、BC++、VC1.5、DEVCPP(包括WIN-TC,MYTC这些编译外壳)等多个编译平台。由于采用了一些独到的硬件加速特性及代码优化,所以性能方面也比较好,而且也算是这几个库中用户手册最详细,实例最多的一个库。它的首页是:http://www.ds0101.com/neosdk,你也可以到本站的页面http://www.bc-cn.net/Soft/kfyy/c/200605/302.html下载获得,当然也是开源的。
此外还有不少不错的图形库,但由于兼容性(如SVGACC)或尚未有完整版发布(如EasyTC)等方面问题我们现在就暂不介绍了,以后有机会再慢慢道来。
下一节出场编译环境:DJGPP,敬请关注!
[此贴子已经被作者于2007-5-28 9:22:40编辑过]