[[Tips]]

* OpenGLES関連のTIPS [#dac91632]

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


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

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


*** 初期化(一度だけやれば良い) [#n6bed0f9]

 // 通常のテクスチャ設定
  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, this->img_.width(), this->img_.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, b\
uffer);

  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);

** 描画時の処理 [#eb1e12a5]

      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