OpenGL(GLUT) 〜テクスチャα〜

 glpng を使用したらテクスチャアルファが簡単に使えるので実験してみました。PNG イメージのα値は元のイメージとアルファチャンネルを『shin's Palette PNG Editor』を使用して合成しました。テクスチャアルファを使用するのは非常に簡単で pngBind ()PNG_ALPHA を第三引数に指定するだけです。pngBind () の引数説明は OpenGL(GLUT) 〜PNG for glpng〜を参照して下さい。注意が必要なのはマテリアルの ambient, diffuse, specular 各要素の w 成分がα値としても使用されるのでこれに 0.0f は指定しないで下さい(※最初α指定したらモデルが消えてヽ(;´Д`)ノ な感じになってしまいました)。
ここで glTexEnvf () について説明したいと思いますがまず引数の説明をします(何故この説明が必要かは後で…)。
第一引数 現在は GL_TEXTURE_ENV しか指定出来ません
第二引数 現在は GL_TEXTURE_ENV_MODE しか指定出来ません
第三引数 RGB 成分
GL_MODULATE フラグメントカラーとテクスチャカラーの乗算値を使用します
GL_DECAL テクスチャカラーを使用します
GL_BLEND フラグメントカラー×(1 - テクスチャカラー)を使用します
GL_REPLACE テクスチャカラーを使用します
※フラグメントカラーとは頂点計算後の頂点色(テクスチャはその後に適用される)

α成分
GL_MODULATE フラグメントαとテクスチャαの乗算値を使用します
GL_DECAL 適用されません
GL_BLEND フラグメントα値を使用します
GL_REPLACE テクスチャα値を使用します
※フラグメントαとは頂点計算後の頂点α値(テクスチャはその後に適用される)
デフォルトでは GL_MODULATE が設定されています。この場合は最終的に出力される結果は上の表からモデル色はテクスチャカラーとフラグメントカラーの乗算値が使用され、α値はフラグメントαとテクスチャαの乗算値が使用されます。これが一番自然に見える設定でしょう。上の表から分かる様にテクスチャαを使用する場合には GL_DECAL 又は GL_BLEND を使用するとテクスチャのα値が使用されません。デフォルトで GL_MODULATE が設定されているので変更しない限り特に問題はありませんが、テクスチャαを使用する場合は一応注意しておきましょう。