[iPhone] [テクスチャ]OpenGL

  • |
   

テクスチャ

テクスチャとはポリゴンに画像を貼付けること。
流れとしては、
  • 1、画像を読み込んでテクスチャを生成する
  • 2、ポリゴンに貼付ける
  • 3、テクスチャを削除する


テクスチャの読み込み


loadTextureを使って、画像を読み込みます。
[cc lang=”c”]
sampletexture = loadTexture(@”sample_tex.png”);

[/cc]
先ほど読み込んだ画像は、UIImageオブジェクトで表示されています。UIImageは、グラフィックシステムの中では上位に位置づけられており、簡単に画面に表示できる反面、ビットマップデータを取り出すような低レベルな操作を行うAPIは提供されていない。
そこで、Core Graphicsフレームワークを使って画像を表すのが、CGImageと呼ばれるオブジェクトが必要となります。

UIImageをCGImageで生成する処理
[cc lang=”c”]
CGImageRef image = [UIImage imageNamed:filename].CGImage;
[/cc]

CGImageオブジェクトでテクスチャを生成します。

※ここの処理は調べてもわからなかった。
CGContextRef():このグラフィックスコンテキストには、描画システムがその後の描画コマンド実行に必要とする情報が格納されます。グラフィックスコンテキストは、描画時に使用する色、クリッピング領域、線の幅とスタイルの情報、フォント情報、合成オプションなど、基本的な描画属性を定義します。

CGContextRelease()

テクスチャの生成


テクスチャを生成するには「glGenTextures()」を使います。

次に「glBindTexture」を使って、指定したテクスチャの次元をしていします。次元はGL_TEXTURE_1D または GL_TEXTURE_2Dのどちらかを選択します。

void glTexParameteri()でテクスチャの設定をしていきます。
引数1:GL_TEXTURE_1DもしくはGL_TEXTURE_2Dです。
引数2:どのパラメータを設定するかを指定。
引数3:色の利用についての設定。GL_NEARESTかGL_LINEARなど

GL_TEXTURE_MAG_FILTERは、テクスチャが拡大されて張られるときの設定です。
GL_TEXTURE_MIN_FILTERは、テクスチャが縮小されて張られるときの設定です。

ミップマップ:縮小した際に自然に見えるようにする技法。ただ処理は重たくなる。
[cc lang=”c”]
/* テクスチャを拡大・縮小する方法の指定 */
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
[/cc]

詳しくはこちらこちらを参考に。

メモリ上の2次元画像をテクスチャに割り当てます. 
glTexImage2D();

テクスチャを張り付ける


[cc lang=”c”]
  glEnable(GL_TEXTURE_2D);  // ① 2次元テクスチャを有効にしている。

glBindTexture(GL_TEXTURE_2D, texture); // 使うテクスチャの生成します。

  //頂点を設定
glVertexPointer(2, GL_FLOAT, 0, squareVertices);
glDisableClientState(GL_VERTEX_ARRAY);
  
  //色を設定
glVertexPointer(4, GL_UNSIGNED_BYTE,0,squareColors);
glEnableClientState(GL_COLOR_ARRAY);
  
 glTexCoordPointer(2, GL_FLOAT, 0, textColors); //マッピング座標を設定

//OpenGLに先程設定した頂点や色、マッピングを伝えている。
  glEnableClientState(GL_TEXTURE_COORD_ARRAY);
  glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

glDisable(GL_TEXTURE_2D); // ① 2次元テクスチャを無効にしている。
[/cc]

OpenGLで作るiPhone SDKゲームプログラミング
OpenGLで作るiPhone SDKゲームプログラミング

Related Posts Plugin for WordPress, Blogger...