最終更新: mikk_ni3_92 2008年07月23日(水) 19:03:50履歴
現在地 >> メニュー >> サンプルコード::OpenGL >> OpenGL::テクスチャのはりかた
現在地 >> メニュー >> 基本編06 >> OpenGL::テクスチャのはりかた
「OpenGL」では、基本的に画像を読み込む「関数」がない。
↓
といった手段を用いる。
以下、
「色データ」は「char * 型」に格納したものと仮定する。
(「OpenCV」や「AUXライブラリ」なら「char*型」に格納されるはず)
配列の並びは例えば以下のようになる。
char[0] => Redデータ
char[1] => Greenデータ
char[2] => Blueデータ
char[3] => Redデータ
char[4] => Greenデータ
char[5] => Blueデータ
・
・
・
テクスチャを作成するのに基本的に必要なのは、
である。
[例]:「テクスチャ」を作成
この場合、作成する「テクスチャの数」は2枚。
そのうち、1枚目の「texture[0]」に対し、設定をしている。
2枚目を設定するには、
glBindTexture(GL_TEXTURE_2D, texture[1]);
としてその下に設定を書いてゆく。
「gluBuild2DMipmaps()関数」を使うことで、
「画像のサイズ」が「2のn乗でなければならない」という制限がなくなる。
※なお、「GL_ARB_texture_non_power_of_two」という拡張があると、
「glTexImage2D()関数」で「2のn乗以外」が使用可能。(OpenGL 2.0では標準機能)
一般に「テクスチャ」は「2次元の画像」である。
「画像の左下を原点」とする「s-t座標」を考え、
その「座標」と「ポリゴンの頂点」とを対応させればテクスチャがはれる。
(※s-t座標はx-y座標でいうと、
s → x (横軸),
t → y (縦軸)
というように対応。
)
[例]:四角形にテクスチャをはる
この場合、画像の左上から、反時計まわりで頂点と対応付けをしてはっている。
現在地 >> メニュー >> 基本編06 >> OpenGL::テクスチャのはりかた
「OpenGL」では、基本的に画像を読み込む「関数」がない。
↓
- 自作する
- ライブラリを利用する -(AUXライブラリ、SDL、OpenCV、などなど)
といった手段を用いる。
以下、
「色データ」は「char * 型」に格納したものと仮定する。
(「OpenCV」や「AUXライブラリ」なら「char*型」に格納されるはず)
配列の並びは例えば以下のようになる。
char[0] => Redデータ
char[1] => Greenデータ
char[2] => Blueデータ
char[3] => Redデータ
char[4] => Greenデータ
char[5] => Blueデータ
・
・
・
テクスチャを作成するのに基本的に必要なのは、
- 「OpenGL」に「テクスチャの数」をしらせる。
- 「テクスチャ」を「バインド」する。
- 「テクスチャ」を「拡大・縮小」したときの「処理方法」の指定。
- 「テクスチャ」をメモリ上に作成。
である。
[例]:「テクスチャ」を作成
/*****[テクスチャ用変数]*****/ GLuint texture[2]; /******* テクスチャ作成 ****************/ glGenTextures(2, &texture[0]); //数を知らせる glBindTexture(GL_TEXTURE_2D, texture[0]); //1枚目をバインド(設定する) glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);//拡大・縮小についての設定 glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); gluBuild2DMipmaps(GL_TEXTURE_2D, 3,image1->width,image1->height,GL_RGB,GL_UNSIGNED_BYTE,image1->imageData); //メモリ上にテクスチャ作成 ・ ・ ・
この場合、作成する「テクスチャの数」は2枚。
そのうち、1枚目の「texture[0]」に対し、設定をしている。
2枚目を設定するには、
glBindTexture(GL_TEXTURE_2D, texture[1]);
としてその下に設定を書いてゆく。
「gluBuild2DMipmaps()関数」を使うことで、
「画像のサイズ」が「2のn乗でなければならない」という制限がなくなる。
※なお、「GL_ARB_texture_non_power_of_two」という拡張があると、
「glTexImage2D()関数」で「2のn乗以外」が使用可能。(OpenGL 2.0では標準機能)
一般に「テクスチャ」は「2次元の画像」である。
「画像の左下を原点」とする「s-t座標」を考え、
その「座標」と「ポリゴンの頂点」とを対応させればテクスチャがはれる。
(※s-t座標はx-y座標でいうと、
s → x (横軸),
t → y (縦軸)
というように対応。
)
[例]:四角形にテクスチャをはる
glEnable(GL_TEXTURE_2D); glBegin(GL_QUADS); glTexCoord2d(0.0, 1.0); glVertex2d(-1,1); glTexCoord2d(0.0, 0.0); glVertex2d(-1,-1); glTexCoord2d(1.0, 0.0); glVertex2d(1,-1); glTexCoord2d(1.0, 1.0); glVertex2d(1,1); glEnd(); glDisable(GL_TEXTURE_2D);
この場合、画像の左上から、反時計まわりで頂点と対応付けをしてはっている。