DX11で任意のフォントを使った文字列を表示したいです。
https://www.angelcode.com/products/bmfont/
こちらのツールを使って各文字を並べたテクスチャ(ビットマップテクスチャ?)と表示座標などの情報が載ったテキストファイルを用意しました。
・font.txt(一部抜粋)
char id=32 x=1581 y=1395 width=3 height=1 xoffset=-1 yoffset=31 xadvance=7 page=0 chnl=15 char id=33 x=1923 y=1364 width=4 height=16 xoffset=2 yoffset=7 xadvance=8 page=0 chnl=15 char id=34 x=1106 y=1397 width=7 height=6 xoffset=1 yoffset=6 xadvance=10 page=0 chnl=15 char id=12354 x=1080 y=1293 width=19 height=18 xoffset=1 yoffset=6 xadvance=21 page=0 chnl=15 char id=12355 x=1634 y=1382 width=15 height=12 xoffset=3 yoffset=11 xadvance=21 page=0 chnl=15 char id=12356 x=21 y=1386 width=19 height=15 xoffset=1 yoffset=8 xadvance=21 page=0 chnl=15 char id=12357 x=983 y=1382 width=14 height=14 xoffset=3 yoffset=10 xadvance=21 page=0 chnl=15
そして、表示したい文字列の表示座標などの情報を1文字ずつ読み込んで構造体配列にしまっておき、描画時はそれをもとに描画することで半角文字は表示させることができました。
C
1 2// 表示したい文字列 3static char *g_Str[TEXT_MAX] = 4{ 5 "GameStart", 6 "Credit", 7} 8 9// フォント構造体 10struct FONT 11{ 12 BOOL inUse; // 使用中フラグ 13 int id, x, y, w, h, xOffset, yOffset, xAdvance; // ID, 幅と高さ, 表示オフセット, カーソル移動量 14}; 15 16static FONT g_Font[TEXT_MAX][FONT_MAX]; 17 18//-------------------------フォントデータの読み込み------------------------- 19void Init(void) 20{ 21 for (int i = 0; i < TEXT_MAX; i++) 22 { 23 for (int j = 0; *(g_Str[i] + j) != '\0'; j++) 24 { 25 // 文字コードを取得 26 int id = *(g_Str[i] + j); 27 28 char buf[256]; 29 30 FILE *fp; 31 fp = fopen("data/FONT/font.txt", "r"); 32 if (fp == NULL) { 33 exit(-1); 34 } 35 36 // 文字コードを使ってファイルから表示座標などのデータを取得 37 while (fgets(buf, sizeof(buf), fp) != NULL) 38 { 39 sscanf(buf, "%d %d %d %d %d %d %d %d", 40 &g_Font[i][j].id, &g_Font[i][j].x, &g_Font[i][j].y, &g_Font[i][j].w, &g_Font[i][j].h, 41 &g_Font[i][j].xOffset, &g_Font[i][j].yOffset, &g_Font[i][j].xAdvance); 42 43 if (id == g_Font[i][j].id) 44 { 45 g_Font[i][j].inUse = TRUE; 46 break; 47 } 48 } 49 50 fclose(fp); 51 } 52}
ただ、全角文字の文字コードを取得する方法とそれをテキストファイルのID(UTF-16?)に変換させる方法が分からず全角文字が表示できません。
全角文字を表示できるようにするにはどのようなプログラムにすればよいでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。