?? vs.fx
字號:
float4x4 matWorldViewProj;
float4x4 matWorld;
float4 vecLightDir;
float4 vecEye;
texture ColorMap;
sampler ColorMapSampler = sampler_state
{
Texture = <ColorMap>;
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Linear;
AddressU = Clamp;
AddressV = Clamp;
};
texture BumpMap;
sampler BumpMapSampler = sampler_state
{
Texture = <BumpMap>;
MinFilter = Linear;
MagFilter = Linear;
MipFilter = Linear;
AddressU = Clamp;
AddressV = Clamp;
};
// -------------------------------------------------------------
// Output channels
// -------------------------------------------------------------
struct VS_OUTPUT
{
float4 Pos : POSITION;
float2 Tex : TEXCOORD0;
float3 Light : TEXCOORD1;
float3 View : TEXCOORD2;
float3 Att : TEXCOORD3;
};
// -------------------------------------------------------------
// vertex shader function (input channels)
// -------------------------------------------------------------
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); // transform Position
// compute the 3x3 tranform matrix
// to transform from world space to tangent space
float3x3 objToTangentSpace;
objToTangentSpace[0] = mul(Tangent, matWorld);
objToTangentSpace[1] = mul(cross(Tangent, Normal), matWorld);
objToTangentSpace[2] = mul(Normal, matWorld);
Out.Tex = Tex.xy;
// output light vector
float3 Light = normalize(vecLightDir);
Out.Light.xyz = mul(objToTangentSpace, Light);
// get a vector toward the camera/eye -> V
float3 PosWorld = normalize(mul(Pos, matWorld));
float3 LightWorld = normalize(PosWorld + Light);
Out.View = mul(objToTangentSpace, normalize(LightWorld + vecEye));
// point light
// reduce range from -1..1 to 0..1 by multiplying with 0.5 and adding 0.5
Out.Att = (Light * 0.6) * 0.5 + 0.5;
return Out;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -