スポンサーリンク
FTGLを使うと日本語を出力できる。
#include <iostream> #include <Windows.h> #include <gl/GL.h> #include <gl/GLU.h> #include <gl/freeglut.h> #include <FTGL/ftgl.h> #pragma comment(lib,"opengl32.lib") #pragma comment(lib,"freeglut.lib") #pragma comment(lib,"ftgl.lib") #pragma warning(disable:4996) // freeglut: // http://freeglut.sourceforge.net/ // freetype2: // https://www.freetype.org/ //FTGL // https://sourceforge.net/projects/ftgl/ // 参考サイト FTGLの使い方 // http://slis.tsukuba.ac.jp/~fujisawa.makoto.fu/lecture/iml/text/screen_character.html //ウィンドウの幅と高さ int width, height;
struct CFtglObject { const char* FONT_PATHNAME = "C:\\Windows\\Fonts\\msgothic.ttc"; FTPixmapFont* g_pFont; unsigned long g_ulFontSize; // フォントサイズ ~CFtglObject() { delete g_pFont; }
// フォントの初期化 void init(const unsigned long fontsize) { g_ulFontSize = fontsize; if (!g_pFont) { g_pFont = new FTPixmapFont(FONT_PATHNAME); if (g_pFont->Error()) { delete g_pFont; g_pFont = nullptr; } else { g_pFont->FaceSize(g_ulFontSize); } } }
// FTGLで文字列を描画 void print(const std::wstring& wstr,float x, float y) { if (g_pFont) { glRasterPos2f(x, y); g_pFont->Render(wstr.c_str()); } }
};
CFtglObject ftglo; static int rot = 0; //描画関数 void disp(void) { glViewport(0, 0, width, height); glClearColor(0.2, 0.2, 0.2, 1); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glScaled(0.5, 0.5, 0.5); glRotatef(rot, 1, 1, 1); rot++; glDisable(GL_CULL_FACE); double v = 0.7; glBegin(GL_QUADS); glColor3d(1, 0, 0); glVertex2d(-v, -v); glColor3d(0, 1, 0); glVertex2d(v, -v); glColor3d(0, 0, 1); glVertex2d(v, v); glColor3d(1, 1, 1); glVertex2d(-v, v); glEnd();
glColor3d(1, 1, 0); wchar_t text[1000]; swprintf(text, L"赤 %0.3lf %0.3lf",-v, -v); ftglo.print(text, -v, -v ); swprintf(text, L"緑 %0.3lf %0.3lf", v, -v); ftglo.print(text, v, -v); swprintf(text, L"青 %0.3lf %0.3lf", v, v); ftglo.print(text, v, v); swprintf(text, L"白 %0.3lf %0.3lf",-v, v); ftglo.print(text, -v, v);
glFlush(); } //ウィンドウサイズの変化時に呼び出される void reshape(int w, int h) { width = w; height = h; disp(); } //ドラッグ void motion(int x, int y) { disp(); } //エントリポイント int main(int argc, char** argv) { glutInit(&argc, argv); glutInitWindowPosition(100, 50); glutInitWindowSize(500, 500); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
//FTGL使用クラスの初期設定 ftglo.init(25); glutCreateWindow("sample"); glutDisplayFunc(disp); glutReshapeFunc(reshape); glutMotionFunc(motion); glutMainLoop(); return 0; }
2 件のコメント
文字列の幅や高さを取得する方法はありますか?
こんにちは。
手元に環境がないのでテストできませんが、
http://ftgl.sourceforge.net/docs/html/classFTFont.html
を見ると、BBoxでバウンディングボックスが取れるらしいのでこの辺りを使ってみるとうまくいくかもしれません。