6

我正在为具有有限内存(512k 闪存,32k RAM)的 32 位处理器编写应用程序。

该设备上的显示为 128x160 和 16 位颜色,如果我要在处理器上缓冲它,通常会消耗 40k 内存。我没有那么多内存,所以我正在寻找动态生成屏幕数据的技术、技巧、窍门和想法。

可能有帮助的事情:

  • 也许您知道这种限制的资源
  • 也许您已经动态生成了有吸引力的图形
  • 在我扫描显示器时,是否有一种通用算法可以用来即时组合程序内存中的元素(包括 alpha 混合)
  • 简单的矢量渲染技术(或免费(bsd/mit/apache)源码)
  • ???

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

-亚当

4

4 回答 4

8

在某种程度上,您与 Tandys、Spectrums 和早期 PC 时代的游戏开发人员几乎相同。所以,这是我的建议:

您应该阅读 Michael Abrash 关于计算机图形学的著作。它们是在浮点协处理器是可选硬件的时代编写的,它们描述了在旧的(据说是“糟糕的”)软件渲染时代使用的许多基本技术(Bresenham 线等) .

你可以在这里阅读他的大部分“黑皮书” 。

此外,您可能还可以在这里找到许多过去大多数人用来学习图形编程的旧 BBS文件。只需搜索图形、线条等等。

希望有帮助!

更新:我还记得在我第一次尝试在屏幕上绘制东西时使用它不知道我花了多少时间试图理解它背后的数学(好吧,公平地说,我当时像 15 岁)。非常好的(和简单的)3D 介绍,以及关于转换、多边形填充和插值的非常好的首映。

于 2008-10-06T13:41:14.423 回答
3

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

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

于 2008-10-06T13:44:55.557 回答
2

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

这样做的一个令人讨厌的副作用是,您对渲染每个条带所花费的时间有严格的时间限制。所以我想坚持一些无聊但具有可预测性能的东西会很诱人,比如精灵。

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

另外,我赞同另一张海报的建议,即您使用调色板渲染。在 16 位像素上进行快速数学运算非常困难,但如果您对如何布置调色板很聪明,则在 8 位像素上会更快。

于 2008-10-06T14:17:27.300 回答
0

一些将漂亮的图形和低内存结合起来的想法:

  • 将背景和精灵存储在 Flash 中。
  • 使用调色板将动态生成的图形存储到 RAM 中的一半字节。
  • 使用 LCD 驱动程序的窗口功能仅更新您需要的屏幕部分。
于 2008-10-26T14:45:42.237 回答