最終更新: mikk_ni3_92 2010年02月26日(金) 16:22:10履歴
現在地: メニュー >> 発展編01 >> 発展編01::TextureRectangle
一般にテクスチャ座標の取りうる値は0〜1の範囲となっている。
しかし、TextureRectangleを使用すれば、画像の解像度に合わせてテクセルにアクセスすることができる。
例えば、640×480の画像があり、(158,190)のテクセル値を取りたい時に
glTexCoord2f( 158.0f, 190.f );
と書くことができ、指定のテクセル値を正確に拾ってこれる。
※テクスチャを使った画像処理などでは、画素へのアクセスが楽になるかもしれない
条件としては、
非2のn乗の画像が使える。その代わり次のような条件がある。
一般にテクスチャ座標の取りうる値は0〜1の範囲となっている。
しかし、TextureRectangleを使用すれば、画像の解像度に合わせてテクセルにアクセスすることができる。
例えば、640×480の画像があり、(158,190)のテクセル値を取りたい時に
glTexCoord2f( 158.0f, 190.f );
と書くことができ、指定のテクセル値を正確に拾ってこれる。
※テクスチャを使った画像処理などでは、画素へのアクセスが楽になるかもしれない
条件としては、
- OpenGL 3.1以上
- GL_NV_texture_rectangle
- GL_ARB_texture_rectangle
基本的には、
GL_TEXTURE_2D → GL_TEXTURE_RECTANGLE_ARB
に書き換えればよい。
【例】:256×256の画像を使った場合
GL_TEXTURE_2D → GL_TEXTURE_RECTANGLE_ARB
に書き換えればよい。
【例】:256×256の画像を使った場合
//テクスチャ作成 glGenTextures(1, &texture[0]); glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture[0]); glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MAG_FILTER,GL_LINEAR); //拡大フィルタ glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MIN_FILTER,GL_LINEAR); //縮小フィルタ glTexImage2D(GL_TEXTURE_RECTANGLE_ARB,0,3, image1->width,image1->height, 0, GL_RGB,GL_UNSIGNED_BYTE,image1->imageData); … … glEnable(GL_TEXTURE_RECTANGLE_ARB); glBegin(GL_QUADS); glTexCoord2d(0,0); glVertex2d(0,0); glTexCoord2d(256,0); glVertex2d(1,0); glTexCoord2d(256,256); glVertex2d(1,1); glTexCoord2d(0,256); glVertex2d(0,1); glEnd(); glDisable(GL_TEXTURE_RECTANGLE_ARB); … …
非2のn乗の画像が使える。その代わり次のような条件がある。
- ミップマップを使用できない
- テクスチャの繰り返し方法などは、「GL_CLAMP」,「GL_CLAMP_TO_EDGE,」 「GL_CLAMP_TO_BORDER」のみOK
- テクスチャ境界は0を指定する
- など
- 発展編01::まとめコード12(TextureRectangle)