2

avec3 colourInから avertex shaderへの移行frag shaderがあるとします。値をテストし、必要に応じて上書きする方法はありますか?

たとえば、青の値が 0.5 より大きいフラグメントを白に設定しますか?

Shader.fragはこのテストを実装しました:

    if(colourIn.b>0.5){ //or if(greaterThan(colourIn.b,0.5))
     colourIn.b=0.0;
    }

シーンをコンパイルしてレンダリングするのですが、私は色盲なのでうまく機能しているかどうかわかりません (笑)... 理論を正しく理解し、正しく実装できていますか?

キューブ

4

1 に答える 1

0

必要に応じて条件を直接記述できます。例は正しいはずですが、よりスマートな動きは次のようになります。

float mixValue = clamp(floor(colourIn.b * 2.0), 0.0, 1.0);
colourIn.b = mix(colourIn.b, 0.0, mixValue);

// the floor will be:
//     0.0 for [0.0 — 0.5);
//     1.0 for [0.5, 1.0)
//     2.0 1.0
//
// so the clamp will make mixValue:
//     0.0 for [0.0, 0.5]
//     1.0 for (0.5, 1.0]
//
// if you were to multiply by 1.99 then you could
// get rid of the clamp but if the input is a 
// GLubyte then that'd move 128 into the low group
// instead of the high one

これにより、条件付き、したがって関連するパイプラインの停止または並列化の故障が回避されます。

于 2013-11-07T19:21:08.137 に答える