0

なんとかアルファを機能させましたが、1 つのテクスチャだけでアルファを変更したいと考えています。現在、両方でのみ動作します。深度テストとブレンド係数を設定します。

context3D.setDepthTest(false, Context3DCompareMode.LESS);
context3D.setBlendFactors(Context3DBlendFactor.SOURCE_ALPHA, Context3DBlendFactor.ONE_MINUS_SOURCE_ALPHA);

ソースとデスティネーションが正確に何であるかはまだわかりません。明確化があればいいでしょう。 頂点データが含まれています

[x, y, z, u, v, 0|1]

頂点レジスタの設定

context3D.setVertexBufferAt(0, m_vertexBuffer, 0, Context3DVertexBufferFormat.FLOAT_3);
context3D.setVertexBufferAt(1, m_vertexBuffer, 3, Context3DVertexBufferFormat.FLOAT_2);
context3D.setVertexBufferAt(2, m_vertexBuffer, 5, Context3DVertexBufferFormat.FLOAT_1);

フラグメント定数の設定

context3D.setProgramConstantsFromVector(Context3DProgramType.FRAGMENT, 0, Vector.<Number>([textureMul, 0, 0, 0]));

頂点シェーダー

m44 op, va0, vc0
mov v0, va1
mov v1, va2

フラグメントシェーダー

tex ft0, v0, fs0 <2d,clamp,linear>
sub ft0.w, ft0.w, fc0.x
add ft0.w, ft0.w, v1
mov oc, ft0

fc0.x は 0 から 1 の間の数値です。 v1 は 0 または 1 です。

4

1 に答える 1

0

Windows for PIX プログラム (Microsoft DirectX SDK に付属) に感謝します。FLOATの正しい使い方が分かりました。v1 を FLOAT_1 として渡すため、v1.x を使用する必要があるため、正しいフラグメント シェーダーは

tex ft0, v0, fs0 <2d,clamp,linear>
sub ft0.w, ft0.w, fc0.x
add ft0.w, ft0.w, v1.x
mov oc, ft0
于 2013-04-08T16:16:14.380 に答える