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