动态(算法)图形的技术

时间:2008-10-06 13:29:06

标签: graphics user-interface embedded svg

我正在编写32 bit processor with limited memory的应用程序(512k闪存,32k RAM)。

此设备上的display是128x160,有16位颜色,如果我要在处理器上缓冲它,通常会消耗40k ram。我没有那么多RAM,所以我正在寻找技术,提示,技巧,动态生成屏幕数据的想法。

可能会有所帮助的事情:

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

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

- 亚当

4 个答案:

答案 0 :(得分:8)

在某种程度上,你在Tandys,Spectrums和早期PC的游戏开发者的情况几乎相同。所以,这是我的建议:

你应该阅读迈克尔·阿布拉什关于计算机图形学的着作。它们是在浮点协处理器是一个可选的硬件部分的时候编写的,它们描述了许多基本技术(Bresenham线等)在旧的(假设“坏”)软件渲染时使用

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

另外,你可能会发现大多数人在当天用来学习图形编程的许多旧BBS文件here。只搜索图形,线条和不支持的内容。

希望有所帮助!

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

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

这种令人讨厌的副作用是你有时间限制你可以花多长时间来渲染每个条纹。因此,我认为坚持一些无聊但具有可预测性能的东西是很诱人的,比如精灵。

略微偏离主题,但这就是Nintendo DS 3D硬件的工作原理。如果你尝试在相同的y坐标周围渲染太多的多边形,你可以看到它 - 当屏幕刷新超过渲染硬件时,多边形将随机闪烁并辍学。

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

答案 3 :(得分:0)

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

  • 将背景和精灵存储在闪光灯中。
  • 使用调色板将动态生成的图形存储在RAM中,占用一半的字节。
  • 使用LCD驱动程序的窗口功能仅更新所需的屏幕部分。