0

GL_UNSIGNED_BYTE r、g、b に色がありますが、アルファ チャネルを使用して、ジオメトリの色を変えるためにピクセル シェーダー内で使用されるカスタム値を設定したいと考えています。0 と 127 の 2 つの値が考えられますが、頂点シェーダーでこれを行うと問題が発生します。

[バーテックス]

varying float factor;

factor = gl_Color.w

これを行うと、係数は常に 1.0 のようです。

[断片]

varying float factor;

factor = factor;

gl_FragColor = vec4(factor, 0.0, 0.0, 1.0)

出力は常に赤で、係数がゼロの場合と係数が 127 の場合の 2 つの異なる色が期待される理由です。

2 つの値 0 と 127 を割り当てた場合、頂点シェーダー 0/0.5 に入る必要がありますか? これは正しいです?

[編集] わかりました、2 つの異なる値が表示されましたが、なぜそれらが得られたのかわかりません。gl_Colow.w コンポーネントで GPU が行っている処理はありますか?

[Edit2] ニコラスが指摘したように、私は glColorPointer(4...); を使用しています。

4

1 に答える 1

2

gl_Color入力を使用していて、 を参照しているので、これらの色の値を指定するためにGL_UNSIGNED_BYTEを使用していると思います。glColorPointerしたがって、コードでは、次の効果のために何かを呼び出しています。

glColorPointer(4, GL_UNSIGNED_BYTE, ...);

(ところで、将来的には、推測を強制するのではなく、実際にこの情報を提供していただけると助かります)

それで、最初の問題:実際4に色成分の数を使用していますか?あなたはそうあるべきですが、どちらか一方の方法ではありません。

これが修正されたので、実際の問題に取り掛かりましょう(または少なくとも元の形式の質問でした)

factor = factor/127.0;(to normalize)

OpenGLはすでにそれを正規化しています。で任意の整数型を使用する場合glColorPointer、取得する値はgl_Color正規化され、型の場合は [0, 1]、UNSIGNED符号なしの型の場合は [-1, 1] のいずれかになります。

于 2012-08-16T17:58:31.223 に答える