トップページ > 空即是色 > 2007年の記事 > GL_TEXTURE_RECTANGLE_EXTで、テクスチャとして使う画像の幅・高さを任意のサイズに設定する
空即是色 GL_TEXTURE_RECTANGLE_EXTで、テクスチャとして使う画像の幅・高さを任意のサイズに設定する
2007年 10月08日
hrkw氏のお告げにより、テクスチャに使う画像の幅・高さを
2の累乗以外のサイズで設定する方法が分かったのでメモ。
流れとしては、
- GL_TEXTURE_RECTANGLE_EXTをEnableにする。
- glBindTextureで、GL_TEXTURE_RECTANGLE_EXTを指定。
- glTexImage2Dで、GL_TEXTURE_RECTANGLE_EXTを指定。
- 描画する時も忘れずに、GL_TEXTURE_RECTANGLE_EXTをEnableして、
glBindTextureでGL_TEXTURE_RECTANGLE_EXTを指定する。 - ※注意として、テクスチャ座標は[0,1]空間ではなくて、
glTexImage2Dで設定した横幅と高さになる。 - ※あと、MacOSX環境では<OpenGL/glext.h>をimportする必要があるとのこと。
下記に簡単なコードを記す。
// (!)texture width and height are not 2^n. #define TEX_WIDTH 163 #define TEX_HEIGHT 97
// build texture glEnable( GL_TEXTURE_2D ); glEnable( GL_TEXTURE_RECTANGLE_EXT ); glBindTexture( GL_TEXTURE_RECTANGLE_EXT, _textureId ); glTexImage2D( GL_TEXTURE_RECTANGLE_EXT, 0, GL_RGBA, TEX_WIDTH, TEX_HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, _bitmapData ); glDisable( GL_TEXTURE_RECTANGLE_EXT ); glDisable( GL_TEXTURE_2D );
// draw glEnable( GL_TEXTURE_2D ); glEnable( GL_TEXTURE_RECTANGLE_EXT ); glBindTexture( GL_TEXTURE_RECTANGLE_EXT, _textureId ); glBegin(GL_POLYGON); glTexCoord2f( 0, TEX_HEIGHT ); glVertex3f( 0, 0, 0 ); glTexCoord2f( TEX_WIDTH, TEX_HEIGHT ); glVertex3f( 1, 0, 0 ); glTexCoord2f( TEX_WIDTH, 0 ); glVertex3f( 1, 1, 0 ); glTexCoord2f( 0, 0 ); glVertex3f( 0, 1, 0 ); glEnd(); glDisable( GL_TEXTURE_RECTANGLE_EXT ); glDisable( GL_TEXTURE_2D );
トラックバック
この記事のトラックバックURL:http://null-null.net/mt/mt-tb.cgi/490