11. 미칠듯한 스프라이트의 압박
캐릭터 하나마다
이런 방식으로
30-40장을 사용
옆의 캐릭터가
그나마 가장 적은데
8비트(!) BMP 파일로
9.45M 의 용량.
적 캐릭터는? 배경은?
음악은? 동작 데이터
는? 캐릭터 보이스는?
그런데 2P, 3P, 4P, 5P, 6P
컬러도 바꿔야..
41. 8-BIT INDEXED COLOR?
R,G,B 정보를 8비트에 담는 것은 무리.
(3-3-2로 나눈다고 생각하면 끔찍하죠)
즉, 256개의 프리셋(팔레트)을 만들고,
픽셀은 이 팔렛(프리셋)값을 저장한다.
이미지 하나당 최대 256가지 색만 쓴다면
팔렛에는 자유롭게 R,G,B를 세팅한다.
즉, 이미지가 크지 않다면
무시하기 못할 퀄리티가 나온다.
43. 소스 데이터로써 8비트
어차피 백버퍼는 24 혹은 32비트라고 가정하면,
스프라이트, 혹은 텍스춰 등의 게임 소스 비트맵을
8비트 데이터로써 메모리에 올릴 수 있다.
이로써 생기는 장점은 메모리 사용의 감소.
그리고, 팔렛변환의 특징인 손쉬운 색상 변환이다.
(격투게임등의 2P, 3P 컬러 같은 것을 구현하기 위해)
스프라이트마다 개별적인 팔렛을 가질 수 있으므로,
최종적인 결과 화면은 256컬러가 아니다!
44. 여기에 RLE 를 사용한다면?
RLE(Realtime Length Encoding)을 기억하시나요?
더 적은 메모리 점유와 빠른 블리팅
49. 기본적인 원리
1. OpenGL ES 1.1템플릿의 어플리케이션 생성
2. 화면사이즈보다 크게 GLubyte* 로 백버퍼 선언
3. 백버퍼에 직접 픽셀 쓰기
(백버퍼의 데이터 순서는 좌표 기준으로,
(0,0) R, (0,0) G, (0,0) B, (0,0) A, (1,0) R...의 순서
즉 (X + (Y * Max_X))*BitRate)+color 로 접근.
4. 백버퍼를 glTexImage2D 로 텍스쳐로 만든다.
5. 사각형 폴리곤을 생성하여 화면가득 렌더링
참 쉽죠?
56. 그래서 결과는 어떤가?
Xcode에 처음 손댄게 9월 27일.. 그리고 1달 남짓
첫 3주일간 CK2D 엔진을 구축
이후 1주일 만에 첫 메인 게임 구동 성공
다시 1주일만에 대부분의 기능 구현
57. CK2D 엔진?
OpenGL ES 1.1 기반
백버퍼/픽셀제어 기반의 2D 그래픽 제어
비압축, RLE8압축 8비트 BMP형식 지원
BRP, BBR(BRP2.0) 압축 스프라이트 지원
반투명, 모션블러 이펙트 지원
3D스프라이트 지원
비트맵 한글 출력 지원
58. CK2D 엔진?
OpenGL ES 1.1 기반
백버퍼/픽셀제어 기반의 2D 그래픽 제어
비압축, RLE8압축 8비트 BMP형식 지원
BRP, BBR(BRP2.0) 압축 스프라이트 지원
반투명, 모션블러 이펙트 지원
3D스프라이트 지원
비트맵 한글 출력 지원
포맷 변환툴, 소스코드 공개 예정
59. 이식 작업을 위한 간단한 팁
1. 먼저 그래픽 출력 기능부터 래핑 코드를 짜자.
2. 모든 그래픽 명령이 래핑되면 컨트롤 파트를.
3. 사운드는 일단 전부 주석처리를 해놓은채로
소스코드를 그래픽/컨트롤 위에 쌓아올린다.
4. 리소스 파일의 경로를 꼭 주의할 것.
60. 작업 하며 느낀 점들
1. iPhone의 성능이 생각보다 강력하다.
2. 웬만한 백버퍼 방식의 90년대 게임은 이식 가능
(제 그녀의 기사단 원작도 이식 가능할 듯)
3. PC와 Mac을 오가며 작업하다 보면 헷갈린다.
(가급적 Visual Studio와 Xcode의 단축키를 통일)
4. 오브젝티브-C 와 단순화된 구조가 싫은 노땅은
OpenGL ES 를 하자.