vs.fx
来自「3d 游戏 入门教程之例子源码-图像渲染」· FX 代码 · 共 71 行
FX
71 行
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 + =
减小字号Ctrl + -
显示快捷键?