0

2 つの異なる形状が必要だとしましょう。1 つはカラー バッファーを使用し、もう 1 つはテクスチャ バッファーを使用します。チュートリアルでは、シェーダーでそのコードをどのように書き出すのでしょうか。両方?

次のコードのように、別のコード行にテクスチャ用のものと色を青色にするものがあります-この言語でその区別をどのように行うのでしょうか-intを使用して2つの間の選択を象徴しようとしましたが、そうではありませんでしたなかなかうまくいかない…

<script id="shader-fs" type="x-shader/x-fragment">
     precision mediump float;

varying vec2 vTextureCoord;

uniform sampler2D uSampler;

void main(void) {
    gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.s, vTextureCoord.t));

   // gl_FragColor= vec4(0.0, 1.0, 0.0, 1.0);
}
</script>
4

1 に答える 1

1

これを行うには、さまざまな方法があります。

  • ifシェーダーにステートメントまたは? :式を記述して、パラメーターに基づいていずれかを選択することができます。(あなたはこれを試したようですが、どういうわけか間違っていました - あなたの質問からは何が問題だったのかわかりません。ただし、int整数計算はそうで​​はないため、特定の必要がない限り、パラメーターの使用は避けますGPU は最適化されています。)

  • テクスチャと均一な色を掛け合わせて、テクスチャのあるオブジェクトに白い色を、色付きのオブジェクトに白いテクスチャを与えることができます。(これは、従来の「固定機能パイプライン」レンダリングの動作に似ています。)

  • 2 つの異なるシェーダーを使用できます。1 つはテクスチャのみを処理し、もう 1 つは色のみを処理します (オブジェクト間を使用してそれらを切り替えgl.useProgramます)。

  • テクスチャのみを使用し、目的の色を含む 1×1 テクスチャを使用してオブジェクトに色を付けることができます (頂点ごとの色ではなく均一な色が必要な場合)。

これらはすべて、問題を解決するための完全に優れた方法です。プログラムの残りの部分で最も便利な方を実行してください。パフォーマンスが気になる場合は、それらを試して最速のものを選択してください。

于 2013-06-29T23:49:05.473 に答える