今日は、GLSLによるグーローシェーディングとフォーンシェーディングを紹介します。グーローは頂点ごとに光源計算を行い、頂点の色を計算し、三角形の内部を色補間します。フォーンは三角形内部を法線補間し、画素毎に色を計算します。フォーンの方が重いのですが、スペキュラー等は綺麗になります。 OpenGLの光源計算 プログラムを紹介する前に、OpenGLの光源計算方法を簡単に説明します。OpenGL(DirectXでも同じですが)では、光源による物体表面の色は、主にdiffuse(拡散反射)とspecular(鏡面反射)から計算します。下の図に示すように、diffuseは光源ベクトルと法線ベクトルとの内積で計算されます。 一方、specularは光源ベクトル、法線ベクトル、視線ベクトルから計算されます。OpenGLの固定パイプラインによる光源計算(GLSLを使用しない光源計算)では、左下の図のように