相較於BG在渲染時會依照Map memory中的Map data進行渲染,Object在渲染時則是依照OAM中的資訊來進行,本文將會對OAM特性進行說明
OAM layout
我們的OAM位於0x0700'0000 ~ 0x0700'03ff,總共可以分成128塊,每一塊為6 bytes
每一個6 bytes的實體又分為三部分
- Attribute 0
- y-coordinate: 描述此obj位於螢幕上的y座標
- Rotation/Scaling Flag: 用於標示此obj是否需要旋轉縮放
- OBJ Mode: obj有三種模式可以選擇
- 00: 正常的描繪此obj
- 01: 此obj需要進行alpha blending,詳見GBA圖形處理邏輯模擬 - Graphics effect
- 10: OBJ window: 將此obj用於描述window的形狀,詳見GBA圖形處理邏輯模擬 - Graphics effect
- 11: 無實際作用
- OBJ Mosaic: 對OBJ套用mosaic特效,詳見GBA圖形處理邏輯模擬 - Graphics effect
- Color mode: 與bg map上的相同欄位功能類似,決定此obj要以16色還是256色繪製,關於tile詳見GBA圖形處理邏輯模擬 - Tile format
- OBJ Shape: 標示此obj的形狀特徵,詳見後面描述
- Attribute 1
- x-coordinate: 描述此obj在螢幕上的x座標
- Rotation/scaling parameter selection: 若此obj有啟用rotation/scaling功能,則可透過此field指定要使用的旋轉縮放矩陣,詳見下方說明
- Horizontal/Vertical flip flag: 若此obj沒有啟用rotation/scaling功能,則可利用此flag標明需要水平/垂直相反繪製,需要注意的是這兩個flag剛好與Rotation/scaling parameter重疊
- OBJ Size: 與OBJ shape配合,用於決定obj的size,見下表說明
- Attribute 2
- Character name: 如同map data,這裡個character name也是一個offset number,將其乘上0x20後即為此obj的tile data起始位置,要特別注意的是在DISPCNT(0x0400'0000)中的OBJ Character VRAM Mapping Format控制著obj tile在memory裡投排列的方式,詳見GBA圖形處理邏輯模擬 - Object tile memory
- Attribute 0
OBJ Rotation/Scaling Parameters
就如同先前在講Affine background時候提到的,OBJ也可以透過仿射矩陣來做旋轉與縮放,矩陣位於OAM之中,但是排列方式比較特殊,我們來回顧一下這張圖
我們可以發現運算所需要的PA、PB、PC、PD以6 bytes為間隔,分散存放,而旋轉方法大致上與GBA圖形處理邏輯模擬 - Affine background說明的一樣,但有幾點需要注意: - OBJ的旋轉是以自身中心點作為旋轉的基準,而非左上角