さまざまなアルファ値を持つRGBA形式のテクスチャをメモリにロードしています。
画像は次のように読み込まれます。
GLuint texture = 0;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
self.texNum = texture;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, self.imageWidth, self.imageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, [self.imageData bytes]);
画像のアルファチャネルがすべて1として扱われ、テクスチャがRGB画像のように描画されるように、このテクスチャを描画する方法を知りたいです。
ベースイメージを考えてみましょう。
この画像は0から255アルファへの進行であり、全体で255,0,0のRGB値を持っています
ただし、ブレンディングを無効にして描画すると、次のような画像が表示されます:www.ldeo.columbia.edu/~jcoplan/alpha/no_alpha.png
私が本当に欲しいのは次のような画像です:www.ldeo.columbia.edu/~jcoplan/alpha/correct.png
アルファチャンネルを完全に無視するようにいくつかのポインタを本当に感謝します。他のポイントでアルファチャネルが必要なため、最初は画像をRGBとしてロードすることはできないことに注意してください。
編集:私はGL_COMBINEを使用して問題を解決しようとしました:
glColorf(1,1,1,1);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
[self drawTexture];
しかし、それでも運がないので、それでも黒から赤になります。