2013-04-08 93 views
0

我設法使alpha可以工作,但我只想在一個紋理上更改alpha。目前它只適用於兩者。我設置深度測試和融合的因素: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爲Windows爲PIX程序爲0或1

回答

0

感謝上帝(自帶的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