GFN Maker

From KBase

Jump to: navigation, search

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

Image:gfn_maker_screenshot.png

[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

Image:gfn_test_screenshot.png

[edit] 사용법

(To be filled...)

  • Graphics, Font, Color 의 세 가지 class 로 이루어 져 있습니다. PAlib 등 다른 library 와 함께 사용하기 위해서는 Graphics 의 구현을 약간 변경하여 Buffer 를 다르게 지정할 수 있도록 해야 할 것입니다.
  • 다른 Font 를 추가하려면 다음과 같이 합니다
    1. GFN Maker 를 이용하여 .gfn 을 생성한다
    2. 생성된 .gfn 을 data/ 에 넣는다. Makefile 을 약간 손봤기 때문에 .gfn 도 컴파일된다. 이에 대해 잘 모르면 xx.gfn.bin 으로 이름을 바꾸어 넣는다.
    3. make 를 하면 xx_gfn.h 가 생성된다 (bin 이라면 xx_gfn_bin.h) 해당 .h 를 Font.cpp 에서 include 한다
    4. 다른 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 방명록 에 글도 써 주삼~

Personal tools
Wiki Help (mediawiki.org)