ChenMo 发表于 2006-5-26 01:31

[C图形专区] 版序:动手搭建你的工作平台

在DOS编程中,比之于字符界面,图形界面蕴涵更为广泛的内涵,囊括更多的技术范畴。<br><br>或许您正急迫地想知道,如何在程序中:<br>       绘画你思维中的图形;<br>       显示本地中文;<br>       显示图片;<br>       驱动鼠标;<br>       播放音频;<br>       ……<br><br>自行实现这些功能将会让您欣喜不已!<br>想想用您的代码去驱动一个鼠标是多么有趣的事情,<br>您是多么厉害!<br>不要谦虚地拒绝别人的赞赏,<br>因为正是您让一个鼠标动起来了!<br><br>[C图形专区]的开设正是为了被此类困惑已久的网友们一个新的天地。<br><br>深入图形编程是DOS编程中的高级话题,<br>凡属此类问题都将归结到此版咨询提问,<br>并且希望您能得到芸芸高手们的满意的答案。<br><br>还等什么?现在就开始探索吧!
[align=right][color=#000066][此贴子已经被作者于2006-5-26 13:45:44编辑过][/color][/align]

一笔苍穹 发表于 2006-5-26 01:57

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

一笔苍穹 发表于 2006-5-26 13:18


<P 0cm 0cm 0pt">《<FONT face="Times New Roman">DJGPP</FONT>篇》</P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">DJGPP</FONT>是一个<FONT face="Times New Roman">DOS</FONT>平台下(当然,还兼容<FONT face="Times New Roman">OS/2</FONT>、<FONT face="Times New Roman">WIN9X</FONT>等平台)的<FONT face="Times New Roman">32</FONT>位<FONT face="Times New Roman">C/C++</FONT>编译器,它是<FONT face="Times New Roman">GCC</FONT>移植到<FONT face="Times New Roman">DOS</FONT>上的一个子集。可被用来编写<FONT face="Times New Roman">32</FONT>位保护模式程序,最新的版本支持<FONT face="Times New Roman">ANSI C</FONT>和<FONT face="Times New Roman">POSIX.2</FONT>标准。<BR></P>
<P 0cm 0cm 0pt"><BR>一说起<FONT face="Times New Roman">DJGPP</FONT>,对它有所了解的人恐怕会在第一时间里想起<FONT face="Times New Roman"><STRONG><U>Allegro</U></STRONG></FONT>。是的,在<FONT face="Times New Roman">DOS</FONT>下<FONT face="Times New Roman">DJGPP &amp; Allegro</FONT>可以说的天造地设的一对,这里我们就来讲一讲这个<FONT face="Times New Roman">Allegro</FONT>:</P>
<P 0cm 0cm 0pt"><FONT face="Times New Roman">Allegro</FONT>是<FONT face="Times New Roman">Shawn Hargreaves</FONT>领导开发的一个免费开源游戏图形库,它具有跨平台的特性,目前的最高版本是<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899"><FONT face="Times New Roman">4.2.0</FONT></st1:chsdate>,于<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="05" Month="11" Year="2005"><FONT face="Times New Roman">2005</FONT>年<FONT face="Times New Roman">11</FONT>月<FONT face="Times New Roman">05</FONT>日</st1:chsdate>发布。它的功能不可谓不强大:支持各种分辨率和<FONT face="Times New Roman"><st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="15" Month="8" Year="2016">8/15/16</st1:chsdate>/24/32</FONT>全色深、<FONT face="Times New Roman">Unicode</FONT>国际字符扩展、鼠标、游戏摇杆、多种格式的图片读入输出、调色板管理、<FONT face="Times New Roman">RLE/</FONT>编译精灵、多边形渲染、<FONT face="Times New Roman">FLC/FLI</FONT>动画播放、<FONT face="Times New Roman">WAV/MIDI/VOD</FONT>音频文件的录制及播放、资源文件的压<FONT face="Times New Roman">/</FONT>解包、<FONT face="Times New Roman">3D</FONT>定点数学库、矩阵运算库,<FONT face="Times New Roman">GUI</FONT>……<FONT face="Times New Roman"> </FONT>它采用了比较全面的硬件加速加上<FONT face="Times New Roman">DJGPP</FONT>的<FONT face="Times New Roman">32</FONT>位无内存寻址限制,并从汇编级上针对<FONT face="Times New Roman">3DNOW</FONT>、<FONT face="Times New Roman">MMX</FONT>优化,因为它的性能如同它的名字一样——急速。当年有不少<FONT face="Times New Roman">DOS</FONT>商业游戏就是用这对拍挡制作的。有关<FONT face="Times New Roman">Allegro</FONT>,你可以去它的官方网站了解更多:<FONT face="Times New Roman">http://www.allegro.cc</FONT>。另外云风将<FONT face="Times New Roman">Allegro 3.11</FONT>版的用户手册翻译成了中文,虽然翻译的版本比较老,但很有指导作用:<a href="http://www.codingnow.com/allegro" target="_blank" ><FONT face="Times New Roman">http://www.codingnow.com/allegro</FONT></A><BR></P>
<P 0cm 0cm 0pt"><BR>当然,除了<FONT face="Times New Roman">Allegro</FONT>,还有一些其它的库,譬如<FONT face="Times New Roman"><STRONG><U>GRX</U></STRONG></FONT>,和<FONT face="Times New Roman">Allegro</FONT>一样,它也具有跨平台性,但它只是一个<FONT face="Times New Roman">2D </FONT>图形库,由于并不针对游戏,所以也没集成音频的录制播放处理,所以功能的覆盖性比不上<FONT face="Times New Roman">Allegro</FONT>,但也有它自身的亮点:除去与<FONT face="Times New Roman">Allegro</FONT>相关无几的普通<FONT face="Times New Roman">2D</FONT>特性,还支持<FONT face="Times New Roman">PNM/PNG/JPEG</FONT>等图片文件的读写,并提供了一个<FONT face="Times New Roman">Borland BGI</FONT>驱动接口。如果只是制作<FONT face="Times New Roman">2D</FONT>图形程序的话,它的轻盈优雅是非常有吸引力的。<a href="http://grx.gnu.de/" target="_blank" ><FONT face="Times New Roman">http://grx.gnu.de</FONT></A>这是它的主页,去看看吧。</P>
<P 0cm 0cm 0pt"><o:p><FONT face="Times New Roman"> </FONT></o:p></P>下一节出场编译环境:Borland C++ / Watcom C++,敬请关注!

一笔苍穹 发表于 2006-5-26 20:53

<P 0cm 0pt?>《<FONT face="Times New Roman">Borland C++ / Watcom C++</FONT>篇》<br></P>
<P 0cm 2.0? mso-char-indent-count: 21pt; 0pt; TEXT-INDENT:><br>    我为什么要将这两个编译器放在一块说呢,虽然它们是两个独立的编译环境,但是库函数接口有很高的相似度,它们有着许多的通用的库,譬如前面讲到的<FONT face="Times New Roman">Allegro</FONT>,自<FONT face="Times New Roman">4.x.x</FONT>版之后,就增加了对这两种编译环境的支持;而<FONT face="Times New Roman">GRX</FONT>也是一样支持这两个编译环境。正因为是这样,我才将这二者放在了一个小节内。</P>
<P 0cm 2.0? mso-char-indent-count: 21pt; 0pt; TEXT-INDENT:><br>    当然,不可能所有的库都能这样兼容这两个环境,一个叫<FONT face="Times New Roman"><STRONG><U>Ldraw</U></STRONG></FONT>的游戏库,用于Watcom c++,把它放在这的理由是这个库的接口与DirectX较接近,由无名鸟工作室的林伟开发,下面的结构可以描述它的特点:<br>                               LSYS                    LSYS  时钟,模拟多任务,表面操作,DMA<br>                      __________|__________            LDRAW 常规作图,图形文件操作,鼠标<br>                      |         |         |            LKEY  键盘,声卡FM,DSP,MID,WAV的播放<br>                    LDRAW     LKEY      LUTILS         LUTILS实用程序:缩放,物体远近显示等特效<br>                 ____|___    ___|___        |<br>                 |      |    |     |  Extend Functions      <br>     Ordinary Graph   Mouse Sound Keyboard  </P>
<P 0cm 0pt?><o:p><FONT face="Times New Roman"></FONT></o:p></P>
<P 0cm 0pt?><a href="http://newbird.126.com/" target="_blank" ><FONT face="Times New Roman">http://newbird.126.com</FONT></A>这是无名鸟主页,不知道还有没有的下载。<o:p><FONT face="Times New Roman"> </FONT></o:p></P>
<P>你甚至还可以使用<FONT face="Times New Roman"><STRONG><U>OpenGL</U></STRONG></FONT>(<FONT face="Times New Roman">Open Graphics Library </FONT>开放性图形库),一套三维图形处理库,也是该领域的工业标准,我们将在稍后介绍它。还有可以用于<FONT face="Times New Roman">Watcom C++</FONT>的<FONT face="Times New Roman">Power Render</FONT>、<FONT face="Times New Roman">True 3D</FONT>以及用于两种环境的<FONT face="Times New Roman">V3X</FONT>和<FONT face="Times New Roman">Panard Vision等等</FONT>都是老外的,前提是你能找得到。</P>
<P 0cm 0pt?>
<P 0cm 0pt?><o:p><FONT face="Times New Roman"></FONT></o:p></P>
<P 0cm 0pt?>下一节出场编译环境:<FONT face="Times New Roman">DEV-CPP</FONT>,敬请关注!</P>
<p>
[align=right][color=#000066][此贴子已经被作者于2007-7-16 21:35:48编辑过][/color][/align]


页: [1]

编程论坛