|
|
VS_OUTPUT VS(float4 Pos : POSITION, float2 Tex : TEXCOORD, float3 Normal : NORMAL, float3 Tangent : TANGENT? )
{
VS_OUTPUT Out = (VS_OUTPUT)0;
//顶点坐标变换
Out.Pos = mul(Pos, matWorldViewProj);
//构建一个3x3变换矩阵? 用于完成从世界空间到纹理空间的变换
float3x3 worldToTangentSpace;
worldToTangentSpace[0] = mul(Tangent, matWorld);
worldToTangentSpace[1] = mul(cross(Tangent,Normal), matWorld);
worldToTangentSpace[2] = mul(Normal, matWorld);
Out.Tex = Tex.xy;
//顶点在世界空间中的坐标
float3 PosWorld = normalize(mul(Pos, matWorld));
//计算纹理空间中灯光方向向量
float3 Light? = vecLightDir - PosWorld;
Out.Light.xyz = mul(worldToTangentSpace, Light);
//计算纹理空间中的观察方向
float3 Viewer = vecEye - PosWorld;
Out.View = mul(worldToTangentSpace, Viewer);
return Out;
}
为什么是
mul(worldToTangentSpace, Light);
而不是
mul(Light, worldToTangentSpacet);
一个3*3的矩阵能够乘以1*3的向量吗!?!?
请大虾解我心中疑惑...... [em6] |
|