动态(算法)图形的技术

6

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

该设备的显示屏为128x160,16位色彩,如果我要在处理器上缓冲它,通常会消耗40k RAM。由于我没有那么多RAM,因此我正在寻找技巧、提示、诀窍和想法来即时生成屏幕数据。

以下内容可能有所帮助:

  • 也许您知道这种限制的相关资源
  • 也许您已经可以即时生成出吸引人的图形
  • 是否有一种通用算法可以让我即时组合程序内存中的元素(包括alpha融合),同时在扫描显示屏时进行?
  • 简单的矢量渲染技术(或自由(bsd/mit/apache)源代码)
  • ???
我有一个乘法器,但没有浮点处理器。显示器本身有一个非常简单的控制器和用于显示的存储器 - 但读写操作很昂贵,所以如果可以避免,我不想将其用作我的工作空间。
-Adam
4个回答

8

从某种程度上讲,您和游戏开发人员在Tandys、Spectrums和早期PC时代面临的情况几乎相同。因此,这是我的建议:

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

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

此外,您可能会发现很多旧的BBS文件,这些文件在当时大多数人用于学习图形编程这里。只需搜索“图形”,“线条”等即可。

希望能对您有所帮助!

更新:我还记得在最初尝试在屏幕上绘制东西时使用了this。无法确定我花了多少时间来理解它背后的数学(好吧,公平地说我当时才15岁)。这是一个非常好(且简单)的3D入门,以及转换、多边形填充和插值的很好的首映。

3

您将在屏幕上显示哪种数据?

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


2
我认为处理这种情况的基本技术是将屏幕分成狭窄的水平条纹,并仅在RAM中缓冲两个这样的条纹。一个条纹将被显示,而您会渲染下一个条纹。当扫描“光束”碰到下一个条纹(并触发一个中断供您捕获)时,您交换这两个条纹并开始向下绘制下一个条纹。
这样做的一个不好的副作用是,您对于每个条纹的渲染时间有严格的时间限制。所以我想,坚持使用一些无聊但性能可预测的东西,比如sprites,可能会很诱人。
略微离题,但这就是任天堂DS 3D硬件的工作方式。如果您尝试在相同的y坐标周围渲染太多的多边形,则会看到它-随着屏幕刷新超过渲染硬件,多边形会随机闪烁和掉出。
另外,我赞同其他帖子的建议,即使用调色板渲染。在16位像素上进行快速计算非常困难,但如果您聪明地布局调色板,那么在8位上更快。

0
一些结合了良好图形和低内存的想法:
  • 将背景和精灵存储在闪存中。
  • 使用调色板将动态生成的图形存储在RAM中以减半字节。
  • 使用LCD驱动程序的窗口功能仅更新所需部分的屏幕。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接