标题:[C图形专区] 版序:动手搭建你的工作平台
只看楼主
ChenMo
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:3
帖 子:481
专家分:10
注 册:2004-4-8
 问题点数:0 回复次数:3 
[C图形专区] 版序:动手搭建你的工作平台
在DOS编程中,比之于字符界面,图形界面蕴涵更为广泛的内涵,囊括更多的技术范畴。

或许您正急迫地想知道,如何在程序中:
绘画你思维中的图形;
显示本地中文;
显示图片;
驱动鼠标;
播放音频;
……

自行实现这些功能将会让您欣喜不已!
想想用您的代码去驱动一个鼠标是多么有趣的事情,
您是多么厉害!
不要谦虚地拒绝别人的赞赏,
因为正是您让一个鼠标动起来了!

[C图形专区]的开设正是为了被此类困惑已久的网友们一个新的天地。

深入图形编程是DOS编程中的高级话题,
凡属此类问题都将归结到此版咨询提问,
并且希望您能得到芸芸高手们的满意的答案。

还等什么?现在就开始探索吧!

[此贴子已经被作者于2006-5-26 13:45:44编辑过]

搜索更多相关主题的帖子: 图形 平台 专区 
2006-05-26 01:31
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
得分:0 

欢迎大家光临C图形编程专区,我是版主一笔苍穹,在这里我们将一起讨论那些与C图形编程有关的话题。

我现在还清楚的记得我刚学C语言的那会儿,那个时候我用的编译环境是Turbo C,相信这个东东大家都不会陌生——Borland出品的一个很古老很经典的编译环境,现在许多初学者也还在用着它,不为别的,只因为基于这个编译环境的教程和资料特别多,初学者很容易上手。大家在刚学的时候可能都会有我当时的那种经历:趴在键盘上对着教材敲了许久,然后又是查错又是修改捣鼓了半天,最后好容易才在黑乎乎的屏幕上跳出诸如”Hello world!”几个字母,一开始还很兴奋,可一到后来就越发觉得无聊,因为捣鼓来捣鼓去的最后也只是一块黑乎乎的屏幕上显示几行字(在Windows下则也许是弹出一个DOS虚拟窗口),而且还不能显示汉字,更别说显示图片什么的了,没劲,再一看人家的游戏甭管商业的业余的花花绿绿的多有意思,是吧?我也不是说所有学编程的朋友都和我一样有这种想法,但相信有相当一部分的确是这样的。我当时就是在这种思想的驱动下,一步一步走进了图形编程的世界。

也是基于这个想法,我们开了这个专区,就是用来和对这方面有兴趣的朋友们交流讨论有关图形编程的各种问题。性急的朋友可能这会就要问了:我想用C语言写个RPG游戏应该怎么做?呵呵,做个好一些的游戏不是一天两天的功夫,也不是一两句话能够说的清的,我的这篇也只是介绍性的帖子,而不是技术性的帖子。我开这个帖子,是为了让大家粗略了解自己目前正在使用的编译环境如何搭建到可以开发图形程序,而不是直接讨论如何显示一幅位图或者制作一个游戏。

好了,废话了这么多,咱们言归正传吧,首先我们来看看初学者常用的Turbo C(以下简称TC)环境下应该如何编写图形程序:

TC下,你至少可以使用它自带的Graphics库来写出一些基本的图形程序,说基本是因为你只利用它能绘制一些基本的几何图形,譬如圆啊线啊什么的,显示位图汉字什么的则是力不从心了,由于它是系统自带的,使用非常方便,所以许多朋友都用它来写一些简单界面的图形程序,对这个库本身我没更多要说的了,因为网上已经有N多的教程源码,我只提醒初哥们一句:记得把驱动文件Egavga.bgi(当然也可能是其它的)放在你的程序工作目录下,否则程序是无法执行的。另外值得一提的是这个库后来还放出了许多扩展驱动,譬如Svga256.bgiSvga64K.bgi,也许你已经猜到了:前者是256色驱动,后者是高彩(65536色)驱动,这些驱动让你的程序能支持相应的色深,这很有吸引力,因为默认的Egavga.bgi根本办不到。要使用扩展驱动的过程和原来差不多,但你还必须用installuserdriver()函数安装这个驱动。

即使有了扩展库,也还是有美中不足的地方,就是库函数的功能并未增多,你仍然只能画画线或框什么的,当然如果你对位图格式足够了解的话你也可以将图片有画点函数一点点的画在屏幕上,但这会相当的慢,因为扩展驱动的性能原本就不好,如此一来你会看到一张图片像在屏幕上慢慢展开一样。我曾经也尝试过在扩展驱动的基础上写一组功能更强的函数,我写出来了甚至还给它命名为Lizard,但就是因为性能的问题我把它封闭在备份包中了。

也许上面的介绍会让你灰心丧气,其实大可不必,由于用TC的人很多,所以早就有许多“第三方”开发的图形函数库了,譬如TC256NEO SDKGraphics++SVGACC等等诸多图形库。下面我选几个有代表性的介绍一下。


开始不得不提一下TC256,他是由WIN-TC的作者吴进和Cattom合作开发的,有以下特点:包括256色色深下的基本绘图功能、支持鼠标事件处理、位图、汉字显示,Alpha透明和精灵动画等。由于整个库是基于扩充内存EMS的,所以性能非常不错并支持双缓冲机制。不过也正是由于它EMS特性,造成了它目前的兼容性困惑,它无法工作在DDR内存的机器上(吴进的原话),而现在老式的SDR内存已经很少了,再加上只支持640X480分辨率的限制,以至于TC256到现在通常都是被大家下载下来研究它的源代码了。不过它还有一个基于扩展内存XMS的非发布版本在我这里,Cattom的意思是让我将其融合到NEO SDK中,但由于时间问题我一直没做这件事,在这时里我要为我的食言向他道歉。这个库你可以直接下载:

ThhMp6H7.rar (910.41 KB)


然后要介绍的是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文件播放等等。并且兼容TCTC++BC++VC1.5DEVCPP(包括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编辑过]

2006-05-26 01:57
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
得分:0 

DJGPP篇》

DJGPP是一个DOS平台下(当然,还兼容OS/2WIN9X等平台)的32C/C++编译器,它是GCC移植到DOS上的一个子集。可被用来编写32位保护模式程序,最新的版本支持ANSI CPOSIX.2标准。


一说起DJGPP,对它有所了解的人恐怕会在第一时间里想起Allegro。是的,在DOSDJGPP & Allegro可以说的天造地设的一对,这里我们就来讲一讲这个Allegro

AllegroShawn Hargreaves领导开发的一个免费开源游戏图形库,它具有跨平台的特性,目前的最高版本是4.2.0,于20051105发布。它的功能不可谓不强大:支持各种分辨率和8/15/16/24/32全色深、Unicode国际字符扩展、鼠标、游戏摇杆、多种格式的图片读入输出、调色板管理、RLE/编译精灵、多边形渲染、FLC/FLI动画播放、WAV/MIDI/VOD音频文件的录制及播放、资源文件的压/解包、3D定点数学库、矩阵运算库,GUI…… 它采用了比较全面的硬件加速加上DJGPP32位无内存寻址限制,并从汇编级上针对3DNOWMMX优化,因为它的性能如同它的名字一样——急速。当年有不少DOS商业游戏就是用这对拍挡制作的。有关Allegro,你可以去它的官方网站了解更多:http://www.allegro.cc。另外云风将Allegro 3.11版的用户手册翻译成了中文,虽然翻译的版本比较老,但很有指导作用:http://www.codingnow.com/allegro


当然,除了Allegro,还有一些其它的库,譬如GRX,和Allegro一样,它也具有跨平台性,但它只是一个2D 图形库,由于并不针对游戏,所以也没集成音频的录制播放处理,所以功能的覆盖性比不上Allegro,但也有它自身的亮点:除去与Allegro相关无几的普通2D特性,还支持PNM/PNG/JPEG等图片文件的读写,并提供了一个Borland BGI驱动接口。如果只是制作2D图形程序的话,它的轻盈优雅是非常有吸引力的。http://grx.gnu.de这是它的主页,去看看吧。

下一节出场编译环境:Borland C++ / Watcom C++,敬请关注!
2006-05-26 13:18
一笔苍穹
Rank: 1
等 级:新手上路
帖 子:640
专家分:0
注 册:2006-5-25
得分:0 

Borland C++ / Watcom C++篇》


我为什么要将这两个编译器放在一块说呢,虽然它们是两个独立的编译环境,但是库函数接口有很高的相似度,它们有着许多的通用的库,譬如前面讲到的Allegro,自4.x.x版之后,就增加了对这两种编译环境的支持;而GRX也是一样支持这两个编译环境。正因为是这样,我才将这二者放在了一个小节内。


当然,不可能所有的库都能这样兼容这两个环境,一个叫Ldraw的游戏库,用于Watcom c++,把它放在这的理由是这个库的接口与DirectX较接近,由无名鸟工作室的林伟开发,下面的结构可以描述它的特点:
LSYS LSYS 时钟,模拟多任务,表面操作,DMA
__________|__________ LDRAW 常规作图,图形文件操作,鼠标
| | | LKEY 键盘,声卡FM,DSP,MID,WAV的播放
LDRAW LKEY LUTILS LUTILS实用程序:缩放,物体远近显示等特效
____|___ ___|___ |
| | | | Extend Functions
Ordinary Graph Mouse Sound Keyboard

http://newbird.126.com这是无名鸟主页,不知道还有没有的下载。

你甚至还可以使用OpenGLOpen Graphics Library 开放性图形库),一套三维图形处理库,也是该领域的工业标准,我们将在稍后介绍它。还有可以用于Watcom C++Power RenderTrue 3D以及用于两种环境的V3XPanard Vision等等都是老外的,前提是你能找得到。

下一节出场编译环境:DEV-CPP,敬请关注!

[此贴子已经被作者于2007-7-16 21:35:48编辑过]

2006-05-26 20:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-67246-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026210 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved