現在地: メニュー >> 発展編01 >> 発展編01::TextureRectangle

TextureRectangle


一般にテクスチャ座標の取りうる値は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の画像を使った場合
//テクスチャ作成
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を指定する
  • など
詳細は仕様書のページを参照

サンプルコード

目次

― その他 ―

Wiki内検索

計測中...(07.10.8〜)

Save The World






▲よろしければ広告のクリックもお願いします


▲ランキングに参加しました

管理人/副管理人のみ編集できます