ホームに戻る
 視野テクスチャ

図15_00:(0.0, 1.0, -3.0) から下に見下ろす形でテクスチャをマッピング

ソースコード:glut15_view_texture.c
 解説

視野テクスチャ

OpenGL に視野テクスチャという用語は無い。
OpenGL の機能を利用した応用といえる。
視野テクスチャとは視点からの先の空間に自動でテクスチャを貼れるというもの。
視野空間は視点から四角の空間が広がっていく。
その広がる過程で四角がぶつかる物体に対してテクスチャが適応される。
複雑な凹凸部分にもテクスチャが貼れる。
さらなる応用としてスポットライトや影の生成がある。

原理はテクスチャの自動生成を視野空間で行うこと。
もうひとつはテクスチャの変換行列に視野の設定を行うこと。

なお、サンプルの作成には「床井研究室」というHPを参考にしました。

 自動設定のやり方

GL_EYE_LINEAR や GL_EYE_PLANE を使うのがポイント。

/* テクスチャ自動生成用 */
static double genfunc[4][4]={
  {1.0, 0.0, 0.0, 0.0},
  {0.0, 1.0, 0.0, 0.0},
  {0.0, 0.0, 1.0, 0.0},
  {0.0, 0.0, 0.0, 1.0},
};

/* 頂点の視野空間における座標値をテクスチャ座標に使う */
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
  
/* テクスチャ座標生成関数の設定 */
glTexGendv(GL_S, GL_EYE_PLANE, genfunc[0]);
glTexGendv(GL_T, GL_EYE_PLANE, genfunc[1]);
glTexGendv(GL_R, GL_EYE_PLANE, genfunc[2]);
glTexGendv(GL_Q, GL_EYE_PLANE, genfunc[3]);

 テクスチャの自動生成を有効にする。

glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
glEnable(GL_TEXTURE_GEN_R);
glEnable(GL_TEXTURE_GEN_Q);

 テクスチャの自動生成を無効にする。

glDisable(GL_TEXTURE_GEN_S);
glDisable(GL_TEXTURE_GEN_T);
glDisable(GL_TEXTURE_GEN_R);
glDisable(GL_TEXTURE_GEN_Q);

 テクスチャの座標変換の設定

/* テクスチャ行列の設定 */
glMatrixMode(GL_TEXTURE);

glLoadIdentity();

glFrustum(-1.0, 1.0, -1.0, 1.0, 1.0, 3.0);

/* モデルビュー変換行列の設定に戻す */
glMatrixMode(GL_MODELVIEW);

inserted by FC2 system