43 lines
1 KiB
HLSL
43 lines
1 KiB
HLSL
#include "common.hlsli"
|
|
|
|
cbuffer VolumetricLights
|
|
{
|
|
float3 vMinBounds;
|
|
float3 vMaxBounds;
|
|
float4 FrustumClipPlane[6];
|
|
}
|
|
|
|
struct v2p
|
|
{
|
|
float3 lightToPos : TEXCOORD0; // light center to plane vector
|
|
float3 vPos : TEXCOORD1; // position in camera space
|
|
float fDensity : TEXCOORD2; // plane density alon Z axis
|
|
float3 clip0 : SV_ClipDistance0;
|
|
float3 clip1 : SV_ClipDistance1;
|
|
float4 hpos : SV_POSITION;
|
|
};
|
|
|
|
v2p main(float3 P : POSITION)
|
|
{
|
|
v2p o;
|
|
float4 vPos = 1.0f;
|
|
vPos.xyz = lerp(vMinBounds, vMaxBounds, P);
|
|
|
|
o.hpos = mul(m_P, vPos);
|
|
|
|
o.lightToPos = vPos.xyz - Ldynamic_pos.xyz;
|
|
o.vPos = vPos.xyz;
|
|
|
|
o.fDensity = 0.025f;
|
|
|
|
o.clip0.x = dot(o.hpos, FrustumClipPlane[0]);
|
|
o.clip0.y = dot(o.hpos, FrustumClipPlane[1]);
|
|
o.clip0.z = dot(o.hpos, FrustumClipPlane[2]);
|
|
|
|
o.clip1.x = dot(o.hpos, FrustumClipPlane[3]);
|
|
o.clip1.y = dot(o.hpos, FrustumClipPlane[4]);
|
|
o.clip1.z = dot(o.hpos, FrustumClipPlane[5]);
|
|
|
|
return o;
|
|
}
|
|
|