トップページ > 空即是色 > 2007年の記事 > GL_TEXTURE_RECTANGLE_EXTで、テクスチャとして使う画像の幅・高さを任意のサイズに設定する

空即是色 GL_TEXTURE_RECTANGLE_EXTで、テクスチャとして使う画像の幅・高さを任意のサイズに設定する

2007年 10月08日

hrkw氏のお告げにより、テクスチャに使う画像の幅・高さを
2の累乗以外のサイズで設定する方法が分かったのでメモ。
流れとしては、

  1. GL_TEXTURE_RECTANGLE_EXTをEnableにする。
  2. glBindTextureで、GL_TEXTURE_RECTANGLE_EXTを指定。
  3. glTexImage2Dで、GL_TEXTURE_RECTANGLE_EXTを指定。
  4. 描画する時も忘れずに、GL_TEXTURE_RECTANGLE_EXTをEnableして、
    glBindTextureでGL_TEXTURE_RECTANGLE_EXTを指定する。
  5. ※注意として、テクスチャ座標は[0,1]空間ではなくて、
    glTexImage2Dで設定した横幅と高さになる。
  6. ※あと、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

ページの先頭へ戻る

コメント

ページの先頭へ戻る

iPhoneDev.null-null.net

コメントの一覧

特定のキーワードにマッチした内容の記事をTumblrやMovableTypeに自動的に投稿する
  • nogami
    (2008年03月18日)
  • プールデザイン菅沼
    (2008年03月25日)
  • yuiyui
    (2008年04月12日)
MacOSX環境のOpenGLで日本語文字列の描画
  • nogami
    (2007年10月08日)

  • (2007年10月08日)
  • nogami
    (2007年10月09日)
ウップス!
  • あるぱっか
    (2007年05月24日)
  • nogami
    (2007年05月28日)
  • あるぱっか
    (2007年05月30日)

RSSフィード

このブログの更新情報を、XML(ATOM)フォーマットで提供しています。
ご利用のRSSリーダーやアプリケーションにRSSフィードを登録してください。

ページの先頭へ戻る


Copyright(c) Daisuke Nogami. All Right Reserved.