Tips

OpenGLES関連のTIPS

  • テクスチャブレンディング--2枚のテクスチャを使って乗算処理をする。(OpenGLES 1.1)

テクスチャブレンディング--2枚のテクスチャを使って乗算処理をする。(OpenGLES 1.1)

  • 既存のテクスチャを実行時に加工したいときに使う。マスク処理など。
  • オペレーションを帰ると、エフェクトやバンプマップなどに応用できる。
  • テクスチャブレンディングを行うと、描画処理が2割ほど遅くなる。(iPhone4実測値)

初期化(一度だけやれば良い)

// 通常のテクスチャ設定
 glActiveTexture(GL_TEXTURE0);
 glBindTexture(GL_TEXTURE_2D, texture_handle);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image_width,image_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, image_buffer);

// 2 枚目のテクスチャ設定

 glActiveTexture(GL_TEXTURE1);

 glBindTexture(GL_TEXTURE_2D, texture_handle);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

// テクスチャのオペレーション設定
 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
 glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
 glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
 glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE);
 glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);

// 元に戻す
 glActiveTexture(GL_TEXTURE0);

描画時の処理

     glEnable(GL_TEXTURE_2D);
     glVertexPointer(3, GL_FLOAT, 0, vertices);                                                          
     glEnableClientState(GL_VERTEX_ARRAY);
     glTexCoordPointer(2, GL_FLOAT, 0, texcoords0);                                                  
     glEnableClientState(GL_TEXTURE_COORD_ARRAY);

     glClientActiveTexture(GL_TEXTURE1);
     glActiveTexture(GL_TEXTURE1);
     glEnable(GL_TEXTURE_2D);
     glTexCoordPointer(2, GL_FLOAT, 0, texcoords1);                                                 
     glEnableClientState(GL_TEXTURE_COORD_ARRAY);

     glDrawArrays(GL_TRIANGLES, 0, vertex_count);

     glDisable(GL_TEXTURE_2D);
     glClientActiveTexture(GL_TEXTURE0);
     glActiveTexture(GL_TEXTURE0);

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-05-07 (土) 04:50:55 (2657d)