メタセコモデルのローダーを改良中。なんだけれど妙な問題にぶつかった。どうしてもモデルのシェーディングがおかしい。異常にハイライトがきつかったり暗すぎたり。法線の計算ルーチンがバグっているのかと思い見直してみるも問題ない様子。材質やライティングの設定をあれこれ弄ってみてもだめぽ。数時間悩む。 思い立って何気なくglEnable(GL_NORMALIZE)を有効にしてみたところ一気に解決。どうやら犯人はモデルの大きさを合わせるために使っていたglScalef。こいつで拡大縮小するとおせっかいなことに法線まで拡大縮小されてしまうらしい。OpenGLでは法線は単位ベクトル長でなければならないので、シェーディングがおかしくなったようだ。 glScalefを使う場合はGL_NORMALIZE有効にするか法線の再正規化をしましょうってことで。 法線は拡大縮小されないと勝手に思い込んでいた漏れが悪いのか。