GFN Maker
From KBase
Contents |
[edit] Notice
주의: 이 페이지는 GfnMaker 1.1 에 의해 obsolete 되었음. HanjaDS#GFNMaker 를 참조할 것.
나중에 다시 정리하겠지만, 상당수는 현재 버전의 Gfn 을 이해하는 데 도움이 많이 된다. 다만, 조금 틀린 정보가 남아있을 수 있으니 주의 :-p
[edit] Introduction
자체 제작한 폰트 형식인 GFN 을 만들고 NDS 에서 그릴 수 있도록 한다. 지금은 Windows Application 인 GFN Maker 를 사용하여 여러 폰트를 바로바로 만들어 낼 수 있게 되었지만, GFN 형식에 대한 자세한 설명은 png2fnt 를 참고하기로 한다.
png2fnt 는 GFN Maker 를 만들기 전에 gd 를 사용하여 command line 으로 gfn 파일을 만들던 tool 로서, png 파일을 읽어 gfn 을 만들어 내는 역할을 했었다.
[edit] License
누구나 자유롭게 소스를 가져다 쓸 수 있습니다. 다만 원작자를 표시해 주는 센스~
[edit] GFN Maker
[edit] 사용법
- 저장
- 현재 설정대로 GFN 파일을 만든다
- Smoothness 1~4
- WindowsXP 의 ClearType 을 켜 놓았다면 약간 부드러운 font rendering 을 볼 수 있지만, 그렇지 않은 경우 anti-aliasing 현상이 생기는데, 이것을 강제로 부드럽게 만든다. 실제로는 1배 부터 4배 까지의 크기로 폰트를 rendering 한 후 다시 원래 크기로 HALFTONE StretchBlt 을 하는 것이다. 위 screenshot 에는 Smoothness 3단계가 지정되어 있다.
- Bounding Box (Larger, Smaller, Wider, Narrower)
- NDS 에서 사용될 폰트의 크기 (width x height) 를 정의한다
- Toggle Korean
- 한글 폰트를 만들지 영문 폰트를 만들지 결정한다
- More Settings
- 모든 설정을 하나의 Dialog 에서 한다. start_ch 와 end_ch 는 여기서만 설정 가능하다.
- Font size control (Taller, Smaller, Wider, Narrower)
- 아직 구현하지 않았다.
- Shows Grid
- 푸른 선으로 Grid 를 표시할 지 여부를 설정한다.
- Zoom Level 1~4
- 실제 데이터와는 관계 없이 보이는 배율만 조정한다. 위의 screenshot 에는 2배율로 보고 있다.
[edit] GfnTest
[edit] 사용법
(To be filled...)
- Graphics, Font, Color 의 세 가지 class 로 이루어 져 있습니다. PAlib 등 다른 library 와 함께 사용하기 위해서는 Graphics 의 구현을 약간 변경하여 Buffer 를 다르게 지정할 수 있도록 해야 할 것입니다.
- 다른 Font 를 추가하려면 다음과 같이 합니다
- GFN Maker 를 이용하여 .gfn 을 생성한다
- 생성된 .gfn 을 data/ 에 넣는다. Makefile 을 약간 손봤기 때문에 .gfn 도 컴파일된다. 이에 대해 잘 모르면 xx.gfn.bin 으로 이름을 바꾸어 넣는다.
- make 를 하면 xx_gfn.h 가 생성된다 (bin 이라면 xx_gfn_bin.h) 해당 .h 를 Font.cpp 에서 include 한다
- 다른 Font 들은 어떻게 추가했나 잘 보고 따라한다 ^_^ (자세한 글은 천천히 쓰겠습니다)
[edit] Code
- 위 NDS screenshot 을 그린 코드
Graphics *g = Graphics::getSingleton();
g->setActiveLcd(Graphics::UPPER_LCD);
g->setColor(Color::WHEAT);
g->clearScreen();
g->setColor(Color::DARKBLUE);
g->drawString(10, 10, "NdsFont 의 세계로 온 것을 환영합니다");
g->setColor(Color::LIGHTRED);
g->fillRectangle(10, 25, 100, 20);
g->setColor(Color::BLACK);
g->drawString(15, 30, "Black words");
g->setFont(Font::HYBDA_NUM_80);
g->drawString(5, 50, "2*3=6");
g->setFont(Font::LUCIDA_CONSOLE_24);
g->drawString(5, 120, "The above is HYBDA-NUM");
g->setActiveLcd(Graphics::LOWER_LCD);
g->setColor(Color::WHITE);
g->clearScreen();
struct StText {
Font::FontIndex fontIndex;
Color::ColorName color;
int x, y;
char *text;
} texts[] = {
{ Font::MALGUN_18x22, Color::BLACK, 5, 5, "맑은고딕 18x22 입니다" },
{ Font::LUCIDA_CONSOLE_24, Color::BLACK, 5, 35, "LucidaConsole24" },
{ Font::LUCIDA_CONSOLE_13, Color::BLACK, 5, 65, "Lucida Console 13" },
{ Font::HY_KANG_B_14, Color::BLUE, 5, 90, "HY강-M. 약간 두꺼운 것이 느껴지나요" },
{ Font::HY_KANG_M_14, Color::BLUE, 5, 110, "HY강-B. 약간 가느다랗다고 느껴지나요" },
{ Font::HUMAN_PJ_9_10x12, Color::DARKGREEN, 5, 130, "이것은 휴먼편지체 9pt 입니다" },
{ Font::HUMAN_PJ_9_10x12, Color::BLACK, 5, 145, "폰트가 작아도 충분히 읽을 수 있죠?" },
{ Font::DEFAULT_FONT, Color::BLACK, -1, -1, "" },
};
for (StText *t = texts; t->text[0]; t++) {
g->setFont(t->fontIndex);
g->setColor(t->color);
g->drawString(t->x, t->y, t->text);
}
swiWaitForVBlank();
g->flush();
[edit] Makefile
- Makefile 수정분 - .gpn 이나 .gfn 도 .bin 처럼 bin2o 를 실행시켜 .h 와 .o 를 만들어냄.
#---------------------------------
%.bin.o : %.bin
#---------------------------------
@echo $(notdir $<)
@$(bin2o)
#---------------------------------
%.gpn.o : %.gpn
#---------------------------------
@echo $(notdir $<)
@$(bin2o)
#---------------------------------
%.gfn.o : %.gfn
#---------------------------------
@echo $(notdir $<)
@$(bin2o)
[edit] Download
- Media:ndsdev_font_070605.zip
- 모든 실행 파일(*.exe, *.nds) 및 소스 파일 포함.
[edit] Links
[edit] Other stuffs
- NDS Homebrew Tutorial
- Homebrew 와 관련된 정보들을 모아 놓음
- Times Table for NDS
- 구구단 for NDS
[edit] Guestbook
GyonG 방명록 에 글도 써 주삼~



