glTexParameter*

gltexparameter.png

やるタイミング

設定対象テクスチャの
glBindTextureの直後。

glTexParamteri

フィルタリング

テクスチャマップは四角であるが、ポリゴンに貼っつけられた後はスクリーン座標に変換される。
各々のテクセルが、各ピクセルにぴったりそのままの形ではまることは滅多にない。
magnification…テクセルのある一部分が1ピクセルになる場合。
minification….複数のテクセルがある1ピクセルになる場合。
そこで、それを調整するために、どんな風に平均値を取るか、補完するか、を決めるのがテクスチャのフィルタリングである。

GL_NEAREST

一番近いテクセルを選ぶ。エイリアシング(ぎざぎざ)な仕上がり。

GL_LINEAR

近くの2×2テクセルの平均値にしてくれる。スムースな仕上がり。だけど、少し余計な計算時間がかかる。
もし、テクスチャの一番隅っこに来てしまった場合、ラッピングモードに依存する(端っこに来たらテクスチャを繰り返すのか、切るのか)
これがREPEATになってたとき、判子のお化けが出るのかなぁ。

テクスチャと元の色との関係を決める

最初にモードを決める

glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_REPLACE);

GL_DECAL テクスチャ画像の選択範囲だけを置き換え
GL_REPLACE 元の色に関係なく置き換え
GL_MODULATE1 元の色と掛け算する
GL_BLEND
GL_ADD
GL_COMBINE

普通のアルファブレンディングっぽくするには?

普通のアルファブレンディングでいうところの

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

がやりたい場合
GL_BLENDだった場合はGL_TEXTURE_ENV_COLORを使うことが出来る。

GL_COMBINEだった場合はGL_COMBINE_RGBを使うことが出来る。

glTexEnvf(GL_TEXTURE_ENV,GL_COMBINE_RGB,GL_SUBTRACT);
glTexEnvf(GL_TEXTURE_ENV,GL_COMBINE_ALPHA,GL_SUBTRACT);

GL_SOURCEi_RGBに関する定数

GL_CONSTANT GL_TEXTURE_ENV_COLORで指定した色
GL_TEXTURE テクスチャの色
GL_PREVIOUS
GL_PRIMARY_COLOR フラグメントの色 glColor()で渡した色

GL_TEXTURE_MIN_FILTER

GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MIN_FILTER,GLES20.GL_NEAREST);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_LINEAR);

minだけnearestにしたほうがパフォーマンス良いかも。

GL_TEXTURE_WRAP_ テクスチャラップモード

GL_TEXTURE_WRAPモードは、
テクスチャ座標が(0.0-1.0)の範囲外になっちゃった時、どのような動作をするかを定義します。

定数名 意味 OpenGL ES OpenGL
GL_REPEAT テクスチャを繰り返す O O
GL_CLAMP_TO_EDGE 範囲外のところは、テクスチャの端っこがびよーんと伸びたかんじにする O O
GL_MIRRORED_REPEAT テクスチャを反転しながら繰り返す O O
GL_CLAMP_TO_BORDER 範囲外のところは真っ黒にする X O

OpenGL ESの時にGL_CLAMP_TO_EDGEをやったら、GL_CLAMP_TO_BORDERのような挙動を示す気がする。

繰り返し模様にするには?

glTexParameterf( GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf( GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
Bibliography
1. Open GL ES 2.0 プログラミングガイド…大学院の頃、Androidで3DCGしたい!と思って買って、そのままお蔵入りしてたのですが、会社に入ってから同僚達に貸したら、とても気に入ったのか、たくさん手垢がついて返ってきました(笑) OpenGL ESする人のための安心の定番本です。

サポートサイト Wikidot.com