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