1

そのような計算を移動する方法:

var a : Matrix3D = ...
var b : Matrix3D = ...
a.append( b );

シェーダー内?

私の現在のアプローチ:

setProgramConstantsFromMatrix( VERTEX, 0, a, true );
setProgramConstantsFromMatrix( VERTEX, 4, b, true );


"mov vt0, vc0\n" + 
"mov vt1, vc1\n" + 
"mov vt2, vc2\n" + 
"mov vt3, vc3\n" + 
"m44 vt4, vc4, vt0\n"

vt4 に間違った結果を生成します。私は何を間違っていますか?

4

1 に答える 1

0

シェーダーでは、vt1、2、および 3 を割り当てる必要はありません。シェーダーは、マトリックスが送信されていることを「認識」し、次の 3 つのレジスター (合計 4 つのレジスター) に必要な詳細を自動的にロードします。それらを自分でロードすると、予期しない結果が生じる可能性があります。
また、matrix3D 乗算を適用する順序が重要であることに注意してください。AS3 には、プリペンド メソッドもあり、これは、matrix3D パラメーターを乗算の右側に置きます。append メソッドは、matrix3D パラメータを乗算の左側に置きます。その場合、m44 を適用する順序を逆にする必要がある場合があります。すなわち; vt1 を b に設定し、(m44) に a を掛けることができます。

于 2014-01-28T09:56:16.073 に答える