GBA 게임, 픽셀을 어떻게 그릴까? 비트맵, 스프라이트, 타일 배경 기술 탐구!
GBA에서 픽셀을 그리는 방법은 비트맵 배경(Bitmap Background), 스프라이트(Sprites), 타일 배경(Tiled Background) 등 다양하며, 각 방식의 특징과 구현 난이도가 다름
비트맵 모드(Bitmap Mode)는 픽셀 단위 접근이 용이하지만, 배경 수에 제약이 있으며, Tonc 라이브러리를 활용하여 기본 도형을 그릴 수 있음
스프라이트(Sprites)를 이용한 픽셀 그리기는 복잡하며, 2바이트 단위의 메모리 접근과 4 픽셀 단위 처리를 고려해야 함
타일 배경(Tiled Background)은 여러 개의 배경을 사용할 수 있지만, 타일 맵 설정과 픽셀 단위 접근의 어려움이 존재함
GBA 비트맵 모드(Bitmap Mode)의 이해
GBA의 비트맵 모드(Bitmap Mode)는 240x160 픽셀의 15비트 컬러 비트맵을 제공하여, 각 픽셀에 직접 접근하여 색상을 지정할 수 있게 한다. REG_DISPCNT 레지스터(Register)를 설정하여 모드 3으로 전환하고, vid_mem을 통해 픽셀에 접근한다. 15비트 컬러는 각 채널당 5비트로 구성되며, 0x1f는 순수한 빨간색을 나타낸다. 이러한 방식은 픽셀 단위의 정밀한 제어가 가능하지만, 배경 레이어의 수에 제한이 있다는 단점이 있다.
Tonc 라이브러리를 활용한 기본 도형 그리기
Tonc 라이브러리는 GBA 개발을 위한 다양한 함수를 제공하며, m3_rect, m3_line, m3_plot과 같은 함수를 사용하여 기본 도형을 쉽게 그릴 수 있다. CLR_YELLOW, CLR_RED, CLR_BLUE, CLR_ORANGE, CLR_GREEN과 같은 색상 상수를 제공하여, 개발자가 색상 값을 직접 계산하는 번거로움을 줄여준다. 이러한 추상화는 개발 효율성을 높이지만, 세부적인 제어는 제한될 수 있다.
스프라이트(Sprites)를 이용한 픽셀 단위 그리기
스프라이트는 GBA 게임에서 중요한 그래픽 요소이며, 픽셀 단위의 그리기를 위해서는 타일 데이터와 팔레트를 활용해야 한다. 8x8 픽셀 크기의 스프라이트 타일은 2바이트 단위로 접근해야 하며, 각 바이트는 두 개의 픽셀 정보를 담고 있다. 따라서, 단일 픽셀을 변경하기 위해서는 4 픽셀 단위로 데이터를 처리해야 하는 복잡성이 존재한다. setPixel 함수를 통해 이러한 복잡성을 추상화하여, 픽셀 단위의 그리기를 용이하게 할 수 있다.
타일 배경(Tiled Background)에서의 픽셀 그리기
타일 배경은 스프라이트와 유사하게 타일 데이터를 사용하지만, 타일 맵을 통해 배경을 구성한다. CBB(Character Base Block)와 SBB(Screen Base Block)를 설정하여 타일 데이터와 타일 맵을 지정하고, setPixel 함수를 사용하여 픽셀을 그린다. 타일 맵은 각 타일의 ID를 저장하며, 이를 통해 배경의 모양을 정의한다. 타일 배경은 여러 개의 배경 레이어를 사용할 수 있다는 장점이 있지만, 타일 맵 설정과 픽셀 단위 접근의 어려움이 존재한다.