1

すべての色を 1 つの float 値 (RGB) にエンコードすると、次のようになります。

//Each Channels are from 0 - 255
red << 16 | green << 8 | blue;

これらのカラー チャネルを AGAL に戻すにはどうすればよいですか? ビット単位の演算子はないようです。

4

2 に答える 2

4

これを行う必要はありません。頂点ストリームでBYTES_4入力を使用すると、パックされた色が自動的にアンパックされます。テクスチャも同じことをします。とにかく、定数レジスタは常に4フロートです。色は、[0..1]の範囲に4つの値を持つ4つのベクトルとして考え始める必要があります。

とはいえ、ビットシフトは単なる分割と切り捨てであることを忘れないでください。x >> 1はtrunc(x / 2.0)と同じです。AGALには切り捨てはありませんが、小数部分があり、trunc(x)は正のxのx-frac(x)と同じです。

于 2012-02-01T06:40:13.183 に答える
1

これは、RGB カラー チャネルからデータをアンパックするときに AGAL のビット演算が役立つとわかったケースです。ビット単位の演算に相当する算術演算を既に知っていることを前提としています: http://forum.alternativaplatform.com/posts/list/10343.page#78542

a%b = frc(a/b)*b の AGAL でモジュラスを実行できます。たとえば、ビットマスク &1、&3 演算は、それぞれ 2 と 4 のモジュラス演算 (つまり、 &(modDivisor-1) ) であるため、それらを使用できます。左/右へのシフトは単純に 2 のべき乗 (2^n) による乗算/除算です。n はシフトされるビット数です。または「|」操作は、もちろん、左の yr 桁をシフトした後の単純な加算です..

于 2012-11-21T05:19:57.397 に答える