Tutorial.3 ビットマップモード(2) †応用してみよう †1ドットごとに点を打つことができるようになりましたので // モード3で四角形を塗りつぶす void Mode3DrawBox(u32 sx, u32 sy, u32 ex, u32 ey, u16 col) { u32 x, y; for(y=sy; y<ey; y++) { for(x=sx; x<ex; x++) { Mode3PutPixel(x, y, col); } } } 他にも、直線を引いたり、円や三角形を描画することもできます。 png画像をGBAで表示する †次に、画像ファイルをGBA上に表示させてみる関数を考えてみます。 void Mode3DrawImage(u16* img) { u16* ScreenBuffer = (u16*)0x6000000; u32 x, y; for(y=0; y<160; y++) { for(x=0; x<240; x++) { ScreenBuffer[y*240+x] = img[y*240+x]; } } } 引数の画像データ(色データ)の配列から1つ1つを描画をしていきます。 モード3での画像表示 †#include "lib/gba.h" #include "res.h" //--------------------------------------------------------------------------- void WaitForVsync(void) { while(*(vu16*)0x4000006 >= 160) {}; while(*(vu16*)0x4000006 < 160) {}; } //--------------------------------------------------------------------------- void Mode3DrawImage(u16* img) { u16* ScreenBuffer = (u16*)0x6000000; u32 x, y; for(y=0; y<160; y++) { for(x=0; x<240; x++) { ScreenBuffer[y*240+x] = img[y*240+x]; } } } //--------------------------------------------------------------------------- int main(void) { // モード設定 SetMode(MODE_3 | BG2_ENABLE); // 画像の読み込み Mode3DrawImage((u16*)&imageBitmap); for(;;) { WaitForVsync(); } } 動作画面 †モード3で、240x160のpng画像の表示 ![]() 履歴 †
|