glutBitmapCharacterは珍しい関数では無いけれどなぜかどのサンプルもzを殺している。個人的には以下のようにx,y,zの指定をちゃんとやった方が圧倒的に使いやすい。
//! @brief 文字列を表示 //! @param [in] x 三次元の座標(X) //! @param [in] y 三次元の座標(Y) //! @param [in] z 三次元の座標(Z) //! @param [in] str 文字列(英語のみ) void render_string(float x, float y, float z, const char* str) { glRasterPos3f(x, y, z); const char* c = str; while (*c) { glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, *c++); } }
単に現在の状態を表示するだけならコンソールでいいし、見栄えが重要ならそもそもglutなんて使わないし、何より、文字を左上に出すならちゃんとglLoadIdentityしてから世界座標系で指定する必要がある。手間を省けてない。
//! @brief 文字列を表示 //! @param [in] x 三次元の座標(X) //! @param [in] y 三次元の座標(Y) //! @param [in] z 三次元の座標(Z) //! @param [in] str 文字列(英語のみ) void render_string(float x, float y, float z, const char* str) { glRasterPos3f(x, y, z); const char* c = str; while (*c) { glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, *c++); } } int width, height; //回転オブジェクト定義 nu::mrotate camr; //表示 void disp(void) { glClear(GL_COLOR_BUFFER_BIT); glViewport(0, 0, width, height); glPushMatrix(); //原点を視線方向に0.5ずらす glTranslated(0, 0, -0.5); //回転行列を適用 double mat[16]; glMultMatrixd(camr.getmatrix(mat)); //一辺0.7のキューブを描画 cube(0.7); glColor3d(1, 1, 1); double ws = -0.7 / 2; double we = 0.7 / 2; render_string(ws, ws, ws, "min"); render_string(we, we, we, "max"); glPopMatrix(); glLoadIdentity(); render_string(-1, 0.9, 0, "sample"); glFlush(); }