注册 登录
编程论坛 C图形专区

[原创]我制作的图形库 RGE.Draw2D 发布

RockCarry 发布于 2007-10-03 16:16, 6112 次点击
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 https://www.bc-cn.net
*/ 作者: RockCarry E-mail:rockcarry@163.com QQ:31951258
*/ 时间: 2007-10-3 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------

本来说是国庆节发布的,但是家里面有点事所以迟到了。今天发布 RGE.Draw2D。
RGE 是我希望完成的一个游戏引擎,Draw2D 是 RGE 的一个组成部分,实现了 2D 的图形功能,目前已经完成的差不多了。
但是 Draw2D 距离真正的高性能的图形库还有相当长的路要走,其实 RGE.Draw2D,在许多方面做得并不好,所以这个作品是以交流和学习的目的展示给大家,希望我所作的一些工作能对大家有所帮助,也希望能将大家引入图形编程更深入的层面来,当然也许我做得并不好,所以我更加希望我的作品的发布,能起到抛砖引玉的作用,激起大家的热情,更多的发布自己的作品。
RGE 提供全部源代码,并附送一个点阵字库生成工具和一个精简版的 Turbo C 命令行编译器。
RGE 目前只能工作在 DOS 平台下,需要 Turbo C 编译器进行编译,以后可能会加入对 DJGPP 的支持。关于性能问题,由于实模式 DOS 程序的限制,RGE 采用了通用的页式内存架构,因此性能上损失很大。所以,我目前不 打算进行更多的优化。
以下是 RGE 的全部文件:
只有本站会员才能查看附件,请 登录



RockCarry
2007-10-3



[此贴子已经被作者于2007-10-3 16:22:26编辑过]

29 回复
#2
RockCarry2007-10-03 16:16

先占一楼

#3
RockCarry2007-10-03 16:17
再占一楼
#4
RockCarry2007-10-03 16:18
占3楼
#5
RockCarry2007-10-03 16:18
现在还是国庆节
没有迟到
#6
kk48682007-10-03 16:23

下完了,研究ing

#7
奔跑的鸟2007-10-03 20:12
RockCarry的作品啊,帮顶下,呵呵
#8
leopardxp2007-10-05 17:54

学习!

#9
leopardxp2007-10-05 17:59
不过我发现RockCarry总喜欢用那张“me”的图片~呵呵
#10
RockCarry2007-10-05 21:15
me 很可爱的图片啊
我好喜欢
#11
ba_wang_mao2007-10-08 08:46
不错,我先下载再说。
   请问“RockCarry”,为什么REG不支持XMS扩展内存呢?
#12
ba_wang_mao2007-10-08 10:38
如果支持打点(Putpixel)时直接打到XMS内存中,然后再通过memcopy拷贝到显示缓冲区就非常完美了。
#13
RockCarry2007-10-08 17:12
说下存在的一些问题吧
看过代码的人应该都清楚,其实这个库做得很偷懒,都没有写多少代码
最大的问题可能就是速度的问题
还有就是目前的绘图功能太弱,只有极少的几何图元,不支持线宽线型,不支持多边形填充
而所谓的使用齐次变换矩阵进行几何变换,其实做得很垃圾,,而且由于运算精度没有多大的实用价值
没有提供多边形填充、种子填充等等功能(包括模式填充和位图填充)
没有提供反走样功能
在外部的接口上设计的还算可以,但是内部实现时比较偷懒,在性能上考虑得比较少了
#14
nwpu0634172007-10-08 20:14
挺厉害的  支持一下
#15
ba_wang_mao2007-10-09 09:05
其实在MSDOS TC编译环境下如果能通过XMS实现申请800*600空间或者1024*768空间的双缓冲才是最实际的。
#16
RockCarry2007-10-09 09:22
我采用的是 EMS,目前已经可以支持大内存,并且要实现双缓冲也很容易。目前只能支持 640x480x256 的分辨率。
使用 EMS 是因为常规内存、EMS 内存和页式的 VESA 显存,都可以抽象为页式内存,便于进行统一的管理。
而使用 XMS 内存,则所有的内存操作都要经过 XMS 的功能调用来进行,使用起来会比较麻烦。
#17
ba_wang_mao2007-10-09 11:38
1、请问:为什么只能支持“640x480x256 的分辨率”呢?
NEO SDK中只需要 #define VBE800X600X256 0x103
然后调用如下图形初始化子程序,不就可以初始化为800*600*256色分辨率吗?
我很想知道。
2、我很想实现调用子程序Putpixel(x,y,color)时,不直接画到显存,而直接画到640*480大小的缓冲中,当整个缓冲画好后,再一次性送给显存,REG能否实现?

/////////////////////////////////////////////////////////////////////////////////////////////////
////图形模式初始化子程序
/////////////////////////////////////////////////////////////////////////////////////////////////
void InitGraph(unsigned int mode = VBE800X600X256)
{
_AX = 0x4F02;
_BX = mode;
__int__(0x10);
if (_AH != 0)
{
puts("Can't Initialize the graphics mode!");
exit(1);
}
}
#18
RockCarry2007-10-09 12:20
晕,目前不支持是因为还没有完善
使用双缓冲在 RGE 里面很容易实现,在 RGE 里面有例子代码。大致的方法如下:
+-------------------------------------------------------------------------+
BMP backscreen = {0};
createbmp(&VESASCREEN);
backscreen.pmemdrv = &EMS_MEM_DRV; /* 使用 EMS 内存 */
backscreen.width = VESASCREEN.width;
backscreen.height = VESASCREEN.height;
backscreen.pixelbytes = VESASCREEN.pixelbytes;
createbmp(&backscreen); /* 创建缓冲位图 */
setcolor(RGB(0, 255, 0));
line(&backscreen, 10, 10, 100, 100); /* 在缓冲位图上绘制图形 */
fastputbmp(&VESASCREEN, 0, 0, &backscreen); /* 将缓冲位图刷新到屏幕上 */
destroybmp(&backscreen);
destroybmp(&VESASCREEN);
+-------------------------------------------------------------------------+

#19
ba_wang_mao2007-10-10 16:14
RockCarry:
我将你的“快速入门”文档中的第二个程序(双缓冲)制作成double.C文件后,将REG中的*.h拷贝到C:\TC\INCLUDE\下,然后用TC++3.0 FOR DOS编译,结果出现连接错误,错误如下:
 Linker Error:Undefined symbol _destroybmp in module DOUBLE.C
 Linker Error:Undefined symbol _VGASCREEN in module DOUBLE.C
 Linker Error:Undefined symbol _unloadfont in module DOUBLE.C
等等...
不知何原因?
#20
RockCarry2007-10-10 16:58
链接时加上 RGE.lib 库就可以了
但是需要注意内存模式

#21
ba_wang_mao2007-10-12 09:56
如何制作RGE.lib 库,你的操作说明我没有看懂。
 REG确实做的不错,如果再增加GUI方面的东西就非常好了。
 例如增加WINDOWS逼真界面的对话框、过渡色的标题条、图标、滚动条,就更好了。
#22
kk48682007-10-12 11:39

一个优秀的GUI是很难写的,需要的代码量比目前的RGE要大很多

#23
wangxy2006962007-10-14 11:31
我来晚了!!!
#24
ba_wang_mao2007-10-15 08:31
其实WINDOWS逼真界面的对话框、过渡色的标题条、图标、滚动条,事先用*.BMP图片,*.ICO图标画好,然后显示出来。
  但是如何实现图片的放大、缩小呢?
#25
RockCarry2007-10-15 20:55

编译需要 make 工具配合命令行的 Turboc C 编译器来进行。
可以安装我所提供的 TC 编译器,正确安装以后,只需要双击运行 SRC 目录中的 build.bat 即可完成 RGE 的编译。编译完之后,会再 Lib 目录中生成 RGE.lib 文件。
对于 BMP 的缩放,在 RGE 中提供了 sgretchblt 函数,可以方便的实现。

#26
一笔苍穹2007-10-16 16:04
好久没来了,支持一个先,下下来看看
#27
ba_wang_mao2007-10-30 09:31

REG能否在800*600*64K(800*600真彩色)模式下申请到800*600的空间到EMS中吗?

#28
珍珍2008-11-16 13:14
#29
tr02172009-12-18 16:13
下不下来啊,怎么回事。
#30
Deron2009-12-23 16:07
顶个!
1