2013-04-08 2 views
0

Мне удалось получить альфа-работу, но я хочу изменить альфа только на одной текстуре. В настоящее время он работает только с обоими. Я установил тест глубины и смешайте факторы:AGAL/Stage3D: перекрытие 2 текстур внутри одного шейдера

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

Я все еще не выяснили, что именно источник и destionation, любое уточнение было бы хорошо. вершинных данных содержит

[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 

Fragm лор шейдер

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.

ответ

0

Слава богу, для Windows, для программы 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