新しいテクスチャで読み込むことなく、GUIの色をゲーム内で変更できるようにしようとしています。ここで私はそれが今のところ実装されている方法です。フラグメントシェーダのOpenGLでテクスチャの色を変更することはあまり効果がありません
私は、私はフラグメントの色を変更する必要があるかどうかをチェックし
uniform int maxSwapColors;
uniform bool colorSwap;
uniform vec3 textureColors[3];
uniform vec3 toBeColors[3];
、その後、いくつかの均一な変数の助けを借りて、フラグメントシェーダでSampler2Dを使用して、テクスチャの色を取得することがあること、すなわち、 textureColors内の色に等しい。 textureColorは、Sampler2Dから集められた実際にプリロードされたテクスチャの色です。
for(int i = 0; i < maxSwapColors; i++) {
if(textureColor.xyz == textureColors[i]) {
textureColor.xyz = toBeColors[i];
}
}
これは1つの問題を除いて動作します。
色は、それが何らかの理由でブレンド色の4つのバンドを除いて、ほぼ完全に切り替えます。実際のテクスチャは、フルレッドとフルグリーンの2色で構成されています。これらのバンドでは、プリロードされたテクスチャの色を見ることができます。
私はブレンドはいくつかの点であるためのOpenGLで発生しているが、私はどこか理由がわからないことを前提としています。そして、これは、私が
を使用しても発生します。glslのgreaterThan()およびlessThan()メソッドを使ってtextureColorsの範囲を作成しようとしました。これはバンドを小さくしますが、バンドを完全に削除しないので、より包括的なソリューションを探しています。
ありがとうございました、ありがとうございます!
ありがとうございました!レンダリングする前にこれを置くべきですか? –
テクスチャを生成してバインドした直後に、これを最初に1回だけ配置することができます。 – MarGenDo