Graphics Reference
In-Depth Information
// Input/output structures
struct VSInput
{
float4 Position
: POSITION;
float2 TexCoord
: TEXCOORDS0;
float3 Normal
: NORMAL;
float4 Tangent
: TANGENT;
};
struct VSOutput
{
float4 PositionCS
: SV_Position;
float2 TexCoord
: TEXCOORD;
float3 NormalWS
: NORMALWS;
float3 TangentWS
: TANGENTWS;
float3 BitangentWS
: BITANGENTWS;
float3 PositionWS
: POSITIONWS;
};
struct PSInput
{
float4 PositionSS
: SV_Position;
float2 TexCoord
: TEXCOORD;
float3 NormalWS
: NORMALWS;
float3 TangentWS
: TANGENTWS;
float3 BitangentWS
: BITANGENTWS;
float3 PositionWS
: POSITIONWS;
};
struct PSOutput
{
float4 Normal
: SV_Target0;
float4 Position
: SV_Targetl;
};
// G-Buffer vertex shader for light prepass deferred rendering
VSOutput VSMain( in VSInput input )
{
VSOutput output;
// Convert normals to world space
float3 normalWS = normalize( mul( input.Normal, (fioat3x3)WorldMatrix ) );
output.NormalWS = normalWS;
// Reconstruct the rest of the tangent frame
float3 tangentWS = normalize( mul( input.Tangent.xyz,
(float3x3)WorldMatrix ) );
float3 bitangentWS = normalize( cross( normalWS, tangentWS ) )
* input.Tangent. w;
output.TangentWS = tangentWS;
output.BitangentWS = bitangentWS;
// Calculate the world-space position
Search WWH ::




Custom Search