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 + -
显示快捷键?