床井研究室

箱の中に入ってみる

前回キューブマッピングに使ったテクスチャを立方体の6面に貼り付けました.そこで,今回は前回作ったプログラムを雛形にして,その箱の中に入ってみようと思います.何が見えるかな?

視点をこの箱の中心に移動して、箱の中に入ってみます.視点は元々 Z 軸の正の方向にずらしていた(実際には,物体の方を Z 軸の負の方向にずらしていた)ので,この部分を #if 0#endif ではさんで無効にします.

static void display()
{
  /* モデルビュー変換行列の設定 */
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

  /* 光源の位置を設定 */
  glLightfv(GL_LIGHT0, GL_POSITION, lightpos);

#if 0
  /* 視点の移動(物体の方を奥に移動)*/
  glTranslated(0.0, 0.0, -5.0);
  //gluLookAt(1.5, 2.0, 2.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
#endif

視点を部屋の中心に移動した

陰影付けはしない

なんだか暗いので,テクスチャが陰影に影響されないように,テクスチャ環境を GL_MODULATE から GL_REPLACE に変更します.

/*
** 初期化
*/
static void init()
{
  ...

  /* テクスチャを拡大・縮小する方法の指定 */
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

  /* テクスチャの繰り返し方法の指定 */
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

  /* テクスチャ環境 */
  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

テクスチャに対する陰影を影響を無効にした

マウスをドラッグしてこの箱をぐるぐる回すと,部屋を内側から見回すことができます.テクスチャの境界が目立っているのは,テクスチャ自体の作り方が悪くて,最外周の画素の色が変化しているからです.

箱の中心から見ると環境のテクスチャは歪まない

この画像から,テクスチャの境界を横断している画像中の直線が,テクスチャの境界前後で折れ曲がったりしていないことが確認できます.キューブマッピングでは,環境のテクスチャが反射点に対して無限の遠方にあると仮定しているため,環境が映り込む物体表面上のどの点も,環境のテクスチャの中心にあることになります.この条件では,たとえ環境が立方体にマッピングされていても,面の境界においてテクスチャがゆがむことはありません.

箱の中心から周囲を見回す