2008-10-06 66 views
6

我正在为32 bit processor with limited memory(512k闪存,32k RAM)编程应用程序。动态(算法)图形技术

该设备上的display是128x160 16位颜色,如果我将其缓冲在我的处理器上,通常会消耗40k RAM。我没有那么多的RAM,所以我正在寻找技术,技巧,技巧,以及即时生成屏幕数据的想法。

事情能让:

  • 也许你知道这种限制的资源
  • 也许你已经产生的对飞
  • 吸引力的图形是否有一个通用的算法,我可能会使用简单的矢量渲染技术(或免费(bsd/mit/apache)源代码)
  • ???在程序存储器(包括alpha混合)中动态组合元素,同时扫描显示器

我确实有一个乘法器,但没有浮点处理器。显示器本身有一个非常简单的显示控制器和内存 - 但读取和写入很昂贵,所以如果我可以避免它,我不想将它用作我的工作区。

- 亚当

回答

8

在某种程度上,你是在几乎相同的情况下游戏开发商,其中在Tandys,谱和早期个人电脑的时间。所以,这是我的推荐:

你应该阅读计算机图形学的迈克尔Abrash着作。它们是在浮点协处理器是可选硬件的时代编写的,它们描述了很多在旧的(假定为'糟糕的')软件渲染日期中使用的基本技术(Bresenham行等) 。

你可以阅读他的大部分“黑皮书”here

另外,您大概可以找到很多大部分人在当天使用的旧BBS文件来学习图形编程here。只需搜索图形,线条,而不是。

希望有帮助!

更新:我还记得在我第一次尝试在屏幕上绘制东西时使用this。无法分辨我花了多少时间去了解它背后的数学(当然,我当时是15岁)。非常好(简单)的3D介绍,以及在转换,多边形填充和插值方面的非常好的总理。

3

你会在屏幕上显示什么样的数据?

如果不是摄影图像,可以考虑使用调色板。例如:使用每像素8位的256色调色板需要20kb(查找表加上256 x 2字节),它至少比40kb好。

2

我相信处理这种情况的基本技术是将屏幕划分为窄水平条纹,并且只在RAM中缓冲两条这样的条纹。一个条纹将被显示,而你下一个条纹。当扫描“光束”击中下一个条纹(并且发射一个中断让你捕捉)时,你交换两个并开始绘制下一个条纹。

一个令人讨厌的副作用是,你有时间限制你可以花多少时间来渲染每个条纹。所以我认为,坚持一些无聊但有可预测的表现的精灵会很诱人,比如精灵。

稍微偏离主题,但这是Nintendo DS 3D硬件的工作原理。如果您尝试在同一个y坐标周围渲染太多的多边形,则可以看到它 - 随着屏幕刷新超过渲染硬件,多边形将随机闪烁并退出。

此外,我想第二个海报的建议,你使用palettised渲染。在16bit像素上做快速数学是非常困难的,但如果你对如何布置调色板很聪明,那么在8bit中就会更快。

0

,将结合漂亮的图形和内存不足的一些想法:

  • 存储背景和精灵闪光灯。
  • 商店使用调色板半字节动态产生在RAM中的图形。
  • 使用LCD驱动器的窗口功能,只更新需要将屏幕的一部分。