e4s-sdk/gamedata/shaders/r3/shadow_direct_tree.vs
2026-06-17 23:06:51 +03:00

54 lines
1.4 KiB
GLSL

#include "common.h"
uniform float3x4 m_xform;
uniform float3x4 m_xform_v;
uniform float4 consts; // {1/quant,1/quant,???,???}
uniform float4 c_scale,c_bias,wind,wave;
//////////////////////////////////////////////////////////////////////////////////////////
// Vertex
#ifdef USE_AREF
v2p_shadow_direct_aref main ( v_shadow_direct_aref I )
#else // USE_AREF
v2p_shadow_direct main ( v_shadow_direct I )
#endif // USE_AREF
{
#ifdef USE_AREF
v2p_shadow_direct_aref O;
#else // USE_AREF
v2p_shadow_direct O;
#endif // USE_AREF
// Transform to world coords
float3 pos = mul (m_xform , I.P);
//
float base = m_xform._24; // take base height from matrix
float dp = calc_cyclic (wave.w+dot(pos,(float3)wave));
float H = pos.y - base; // height of vertex (scaled, rotated, etc.)
float inten = H * dp; // intensity
float2 result;
#ifdef USE_TREEWAVE
result = 0;
#else // USE_TREEWAVE
#ifdef USE_AREF
float frac = I.tc.z*consts.x; // fractional (or rigidity)
#else // USE_AREF
float frac = 0;
#endif // USE_AREF
result = calc_xz_wave (wind.xz*inten, frac);
#endif // USE_TREEWAVE
float4 f_pos = float4(pos.x+result.x, pos.y, pos.z+result.y, 1);
O.hpos = mul (m_VP, f_pos );
#ifdef USE_AREF
O.tc0 = (I.tc * consts).xy; // + result;
#endif // USE_AREF
#ifndef USE_HWSMAP
O.depth = O.hpos.z;
#endif
return O;
}
FXVS;