帮忙把一段 ps_1_1的asm代码转成hlsl
struct VertOut
{
float4 Position : POSITION;
float4 modColor : COLOR0;
float4 addColor : COLOR1;
float Fog : FOG;
float4 TexCoord0 : TEXCOORD0; // Ripple texture coords
float4 BTN_X : TEXCOORD1; // Binormal.x, Tangent.x, Normal.x
float4 BTN_Y : TEXCOORD2; // Bin.y, Tan.y, Norm.y
float4 BTN_Z : TEXCOORD3; // Bin.z, Tan.z, Norm.z
};
PixelShader =
asm
{
ps_1_1
tex t0
texm3x3pad t1, t0_bx2 //??
texm3x3pad t2, t0_bx2 //??
texm3x3vspec t3, t0_bx2 //??
madr0.rgb, t3, v0, v1;
movr0.a, v0;
};
Sampler[0] = (BumpSamp);
Sampler[1] = (BumpSamp);
Sampler[2] = (BumpSamp);
Sampler[3] = (EnvSamp);
这段asm代码看的不是很明白,就是后面打问号的三句,求大神级别的帮忙注解或者翻成hlsl。
[解决办法]
哥们,Gpu Gems里面的WaterSimulation的代码吧?
我现在正在尝试实现这个。
细节我还不明白,能有牛人来解释下就好了。说说我表面的理解吧。有误的希望大家指出。
1.t0_bx2
这个就是对t0的每个值减1除2,比如t0.x=(t0.x-1)/2。
作用是将0~1缩放值-1~1
2.texm3x3pad和texm3x3vspec
两个texm3x3pad和texm3x3vspec是组合使用的。细节不懂。由三个纹理采样的结果组成3x3矩阵怎么乘一下吧。
对于这个模拟水的例子而言,这段代码的作用就是根据视角的变化得到了一个反射的颜色值(相关的参数由在VS中输出的四个纹理坐标TEXCOORD0~4决定),然后下面用这个值决定颜色的深浅,然后再加上水的基础颜色。