スポンサーリンク

OpenGLで文字列描画(Asciiのみ)

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();
}

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: