超級任天堂程式設計/圖形教程
本教程將介紹如何將瓦片對映到 SNES 背景。
為了渲染背景,程式必須為每個背景設定一些東西,請記住為每個要渲染的背景設定這些東西
- BG 模式(影響平面數、位深度),在暫存器 0x2105 中設定
- 瓦片大小(8x8 或 16x16),在暫存器 0x2105 中設定
- 設定背景地圖
- 設定背景瓦片集
地圖是一個二維陣列(32x32、64x32、32x64 或 64x64)的瓦片索引。SNES 遍歷陣列,併為地圖中的每個索引渲染陣列中指定的瓦片。由於瓦片可以是 8x8 或 16x16 畫素,因此最終的背景影像尺寸可以從 256 到 1024 畫素(地圖大小 * 瓦片大小)。
陣列中的一個成員是一個 2 位元組長的結構(2 位元組長 = 16 位)
高位元組 低位元組
vhopppcc cccccccc
- c 是瓦片集中的瓦片索引(瓦片集按 BG 指定),SNES 將獲取瓦片的地址為(base_tileset_bits << 13)+(8 * color_depth * tile_number)
- h:水平翻轉
- v:垂直翻轉
- p:調色盤編號
- o:優先順序位
使用暫存器 $2107-$210A 為你的背景設定地圖。
暫存器 $2107-$210A 的結構
aaaaaass
a:VRAM 中地圖的地址。將該數字乘以 2048(或左移 11 位)以獲得地圖的位元組位置。
s:地圖的大小
* 00=32x32 * 01=64x32 * 10=32x64 * 11=64x64
如果地圖的尺寸大於 32(例如 64x32),陣列每行不會有 64 個瓦片索引,而是會在 VRAM 中將兩個 32x32 地圖依次儲存。第一個地圖(32x32 瓦片 = 2*32*32 位元組)將代表地圖的左側,第二個地圖(與第一個地圖相同大小)將代表地圖的右側。
瓦片是一個小的 8x8 或 16x16 影像,用於構建更大的影像。
為了使用 SNES 的 PPU,必須確切瞭解它是如何處理圖形資料的。
- 模式 0:4 色,2 位每畫素(bpp)
- 模式 1:8 色,3 bpp(你可能在一些瓦片編輯器中看到過,但 SNES 不顯示 3bpp 圖形。它們必須在使用之前擴充套件到 4bpp 格式。)
- 模式 2:16 色,4 bpp
- 模式 3:128/256 色,8bpp(僅在模式 7 中)
SNES 對其瓦片資料使用奇數交錯格式。考慮這個帶調色盤的“x”圖案 
瓦片資料本身將由這些位元組組成
.db $00, $81, $81, $42, $C3, $24, $E7, $18, $E7, $18, $C3, $24, $81, $42, $00, $81
"這到底是如何對應於該瓦片的?" 我聽到你在想。
畫素的每一行由兩個位元組表示。取第一行($00,$81)。它包含顏色 2,0,0,0,0,0,0,2。以二進位制形式
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1
位元組 0 中的每個位都等效於它對應畫素中的位 0。取下一行($81,$42)
12000021 colors, 10000001 $81, 01000010 $42,
你可能聽說過位平面。它們表示對應於所有畫素的位?'的位元組集,其中 ? 是從 0 到每畫素位的數量減 1。因此,在本例中,位平面 0 將指瓦片資料中的奇數字節($00,$81,$C3 等)。
這有道理嗎?我自己也不太確定..
SNES 的顏色每個都是 15 位,並以 bgr 格式儲存。
?bbbbbgg gggrrrrr
顏色全綠 像這樣 將儲存為
%00000011, %11100000
以十六進位制表示
$03, $E0
調色盤只是顏色陣列。上面顯示的調色盤將儲存在 ROM 中為(一種顏色為“$xx,$xx”)
.db $EE, $00, $10, $02, $4A, $01, $00, $00
