ブログランキング・にほんブログ村へ


iPhone/iPad用潜水艦ゲームアプリ ソナーエコー iTunesにて公開中

2012年06月15日

OpenGL glScalefで暗くなる問題解決

OpenGLでメッシュモデルをglScalefで拡大すると暗くなる問題(逆に縮小すると真っ白になる)だが、理由がわかった。

glScalefは持っているベクトルを全てスケールするらしく、そうすると法線を定義しているベクトル情報も拡大縮小してしまうようだ。

いうまでもなく法線は単位ベクトルではなくてはならない。
面の明るさは光の入射ベクトルと法線ベクトルの内積で決まるはずなので、これは無理か…と思ったら法線の長さを単位ベクトル扱いにしてくれる指定があった。

glEnable( GL_NORMALIZE );

これで法線の長さがいいかげんでも描画の時に単位ベクトルにしてくれる。

余計な計算が増えるので遅くなるとかいう記述にも当たったが、やってみると自分のモデル程度では全く問題がなかった。

glScalefでメッシュモデルを描画時に自由に拡大縮小できるといろいろ応用範囲が増えて便利だ。
posted by みこあいさ at 12:57| OpenGL