2008-10-06 99 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驅動器的窗口功能,只更新需要將屏幕的一部分。