ホームに戻る
テクスチャ
図02_00:視点より 3.0 先に赤青の板 その 2.0 手前に点光源 1.0 下にミップマップの床
ソースコード:glut02_texture.c
解説
テクスチャ
OpenGL にはテクスチャ用にディフォルトで採用されている画像形式が無い。
よって、画像データは自力でメモリに読み出さなければならない。
また、使用できる画像データは、
縦横がそれぞれ2の n 乗で同じ長さでなければならない。
テクスチャはアルファチャンネルに対応している。
テクスチャの使い方
1つのテクスチャごとにテクスチャ名を得る必要がある。
テクスチャ名の実体は符号無しの int 値で、
以下の例は2つのテクスチャ名を確保している。
GLuint texName[2];
glGenTextures(2 , texName);
テクスチャの切り替えはバインドという操作による。
以下は第2引数のテクスチャ名のテクスチャをバインドしている。
glBindTexture(GL_TEXTURE_2D , texName[0]);
このバインドされた状態で glTexImage2D を呼ぶと、
そのテクスチャ名にテクスチャ画像が割り当てられる。
テクスチャを貼る前には、
貼るテクスチャのテクスチャ名でバインドを行い。
以下のようにテクスチャを有効にする。
glEnable(GL_TEXTURE_2D);
テクスチャを使わないようにしたい場合には、
glDisable(GL_TEXTURE_2D);
を呼ぶ。
実際にテクスチャを貼る場合には、
頂点を置く前に glTexCoord でテクスチャの角を当てる。
その他のパラメータ、
GL_REPEAT はテクスチャをその方向にリピートする。
GL_CLAMP は 0.0 から 1.0 までの1回きりのテクスチャとなる。
GL_NEAREST は補間に一番近くの色を拾う。
GL_LINEAR は補間に色の比率を考慮し間の色を計算する。
GL_MODULATE は元の面の色を考慮する。
GL_DECAL は元の面の色を考慮しない。
glTexParameteri
GL_TEXTURE_WRAP_S:GL_REPEAT or GL_CLAMP
GL_TEXTURE_WRAP_T:GL_REPEAT or GL_CLAMP
GL_TEXTURE_MAG_FILTER:GL_NEAREST or GL_LINEAR
GL_TEXTURE_MIN_FILTER:GL_NEAREST or GL_LINEAR
glTexEnvf
GL_TEXTURE_ENV_MODE:GL_MODULATE or GL_DECAL
ミップマップ
ミップマップはテクスチャを縮小する際に画像が潰れる為、
あらかじめ小さな画像を複数用意しておくこと。
こうすることで遠くに見えるテクスチャが潰れなくなる。
サイズは 16*16 が最大のサイズであれば、
8*8、4*4、2*2、1*1 の計5枚がミップマップの利用に必要である。
glTexImage2D の第2引数は最大のものの番号を 0 とし、
小さくなるにつれ 1 ずつ増やして登録していく。
これをひとつのテクスチャとして glBindTexture する。
ミップマップの場合は縮小において glTexParameter で
ミップマップ画像をある位置を境に切りかえる NEAREST と、
滑らかに変更する LINEAR を選ぶことができる。
GL_NEAREST_MIPMAP_NEAREST:テクスチャとミップマップを NEAREST で。
GL_LINEAR_MIPMAP_NEAREST:テクスチャを LINEAR で、ミップマップは NEAREST で。
GL_NEAREST_MIPMAP_LINEAR:テクスチャを NEAREST で、ミップマップを LINEAR で。
GL_LINEAR_MIPMAP_LINEAR:テクスチャとミップマップを LINEAR で。