|
|
发表于 2005-3-21 18:06:00
|
显示全部楼层
Re:求教:怎样从VShader中输出一个3x3 matrix给PShader?
可以在vs中把lightvector和halfvector转到tangent space
然后通过texture coord或者其他的管道传给ps
如果非要在PS里来转换,那就把T,B,N分别通过texture coord传给PS
normalize以后,就可以组成一个3X3 的MATRIX,把normal乘上这个MATRIX
然后再和lightvector,halfvector计算就可以了
struct VSOUT
{
...
float3 Normal : TEXCOORD2;
float3 Tangent : TEXCOORD3;
float3 Binormal : TEXCOORD4;
...
};
struct PSIN
{
...
float3 Normal : TEXCOORD2;
float3 Tangent : TEXCOORD3;
float3 Binormal : TEXCOORD4;
...
};
in pixel shader(HLSL)
PSIN psin;
float3 T = normalize( psin.Tangent.xyz );
float3 B = normalize( psin.Binormal .xyz );
float3 N = normalize( psin.Normal .xyz );
float3 TBNormal = mul(oriNormal, float3x3(T, B, N));
此时。TBNormal 就是转换到tangent space的normal了
|
|