OpenGL(GLUT) 〜PNG for glpng〜

 OpenGL の GLUT には特定のイメージファイルを読み込む機能がありません。JPEG やら BMP はほとんど標準なのでそれぐらいサポートしていてもいいではないとは思いますが…。なので別途イメージファイルを読み込む機能が必要になってきます。BMP くらい自分で実装しても大した苦労ではありませんがテクスチャαが使用出来ないのでそれなら PNG やろって事で glpng と言う PNG イメージを読み込むためのライブラリを使用します。本体はココでダウンロード出来ます。このライブラリの使用は至って簡単。pngBind () と言う関数を呼び出すだけで PNG イメージをロード出来ます。この関数はフィルタやラップモードも同時に設定します。
ソースは以下の様になります。
pngInfo info;
GLuint texture = pngBind ("sample.png", PNG_NOMIPMAP, PNG_ALPHA, &info, GL_CLAMP, GL_NEAREST, GL_NEAREST);
たったこれだけで PNG イメージが読み込めます( ゜Д゜)ヒョエー
後は戻り値の textureglBindTexture () に渡してやればそれだけでテクスチャが貼り付けられます。
では各引数の説明です。
第一引数 読み込む PNG イメージファイル名
第二引数 ミップマップの生成の有無
PNG_NOMIPMAP ミップマップなし
PNG_BUILDMIPMAP ミップマップあり
PNG_SIMPLEMIPMAP ミップマップあり
第三引数 イメージα値を使用するか?
PNG_CALLBACK pngSetAlphaCallback () によって予め設定された関数をコールバックとして呼び出します。
ピクセル毎に呼び出された関数の戻り値がα値として使用されます
PNG_ALPHA PNG イメージのα値を使用します
PNG_SOLID α値は使用しません
PNG_STENCIL RGB 要素の全てが 0 なら 0 になりそれ以外は 1 になります
PNG_BLEND1 a = r+g+b
PNG_BLEND2 a = (r+g+b)/2
PNG_BLEND3 a = (r+g+b)/3
PNG_BLEND4 a = r*r+g*g+b*b
PNG_BLEND5 a = (r*r+g*g+b*b)/2
PNG_BLEND6 a = (r*r+g*g+b*b)/3
PNG_BLEND7 a = (r*r+g*g+b*b)/4
PNG_BLEND8 a = sqrt(r*r+g*g+b*b)
第四引数 pngInfo 構造体ポインタ。関数から戻るとこの構造体に PNG イメージの情報が格納されます。
第五引数 テクスチャの繰り返し方法。GL_CLAMP もしくは GL_REPEAT を指定。(glTexParameter () を参照)
第六引数 縮小時のフィルタ方法。
GL_NEAREST 処理するピクセルの中心に最も近い値を返します
GL_LINEAR 処理するピクセルに最も近い 4 つのテクスチャ要素の加重平均を返します
GL_NEAREST_MIPMAP_NEAREST 処理するピクセルのサイズに最適なミップマップを選択し
GL_NEAREST を基準として値を返します
GL_LINEAR_MIPMAP_NEAREST 処理するピクセルのサイズに最適なミップマップを選択し
GL_LINEARE を基準として値を返します
GL_NEAREST_MIPMAP_LINEAR 処理するピクセルのサイズに最適な 2 つのミップマップを選択し
GL_NEAREST を基準としてそれぞれのミップマップから値を生成し
それらの値の加重平均を返します
GL_LINEAR_MIPMAP_LINEAR 処理するピクセルのサイズに最適な 2 つのミップマップを選択し
GL_LINEARE を基準としてそれぞれのミップマップから値を生成し
それらの値の加重平均を返します
第七引数 拡大時のフィルタ方法。
GL_NEAREST 処理するピクセルの中心に最も近い値を返します
GL_LINEAR 処理するピクセルに最も近い 4 つのテクスチャ要素の加重平均を返します
他にも何種類かの関数がありますがパラメータ設定をばらしただけ等同じような機能です。