スポンサーリンク

OpenGLでCubeを描く関数

希にほしくなるCubeを描画する関数です。同種の物は探せばいくらでも出てくると思います。

OpenGLはデフォルトで反時計回りを面の表としているので、glFrontFace(GL_CCW)でカリングをし、面の向きが全てCubeの外側を向いていることを確認しています。実際に使用するときは外すと良いと思います。

cube_coord

//! @brief 立方体を描画
//! @param [in] width 立方体の一辺の長さ
//! @return なし
void cube(double width) {
  double ws = -width / 2;
  double we =  width / 2;
  double xs = ws;
  double ys = ws;
  double zs = ws;
  double xe = we;
  double ye = we;
  double ze = we;

  glFrontFace(GL_CCW);//反時計回りが表
  glEnable(GL_CULL_FACE);//カリングを有効にする

  glBegin(GL_QUADS);
  glColor3d(0.5, 0.5, 1.0);
  glVertex3d(xs, ys, zs);//
  glVertex3d(xs, ye, zs);
  glVertex3d(xe, ye, zs);
  glVertex3d(xe, ys, zs);
  glColor3d(0.0, 0.0, 1.0);
  glVertex3d(xs, ye, ze);//
  glVertex3d(xs, ys, ze);
  glVertex3d(xe, ys, ze);
  glVertex3d(xe, ye, ze);

  glColor3d(0.0, 0.5, 0.0);
  glVertex3d(xs, ye, zs);//
  glVertex3d(xs, ye, ze);
  glVertex3d(xe, ye, ze);
  glVertex3d(xe, ye, zs);
  glColor3d(0.5, 1.0, 0.5);
  glVertex3d(xs, ys, zs);//
  glVertex3d(xe, ys, zs);
  glVertex3d(xe, ys, ze);
  glVertex3d(xs, ys, ze);

  glColor3d(1.0, 0.5, 0.5);
  glVertex3d(xs, ys, zs);//
  glVertex3d(xs, ys, ze);
  glVertex3d(xs, ye, ze);
  glVertex3d(xs, ye, zs);
  glColor3d(1.0, 0.0, 0.0);
  glVertex3d(xe, ys, zs);//
  glVertex3d(xe, ye, zs);
  glVertex3d(xe, ye, ze);
  glVertex3d(xe, ys, ze);

  glEnd();

  glDisable(GL_CULL_FACE);//カリングを無効にする
}

 

 

cube

 

 

 

コメントを残す

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

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


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