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

46 lines
No EOL
1.4 KiB
GLSL

#include "fluid_common.h"
cbuffer DynOOBBData
{
float3x4 WorldToLocal; // World to local of fog volume
float3x4 LocalToWorld; // Local of fog volume to world
float4 MassCenter; // Center for angular velocity
float4 OOBBWorldAngularVelocity;
float4 OOBBWorldTranslationVelocity;
}
//////////////////////////////////////////////////////////////////////////////////////////
// Vertex
v2g_fluidsim_dyn_aabb main( v_fluidsim input)
{
v2g_fluidsim_dyn_aabb output = (v2g_fluidsim_dyn_aabb)0;
output.pos = float4(input.position.x, input.position.y, input.position.z, 1.0);
output.cell0 = float3(input.textureCoords0.x, input.textureCoords0.y, input.textureCoords0.z);
output.velocity = 0;
{
output.velocity = OOBBWorldTranslationVelocity;
float3 r = mul( LocalToWorld, float4(output.cell0,1) ) - MassCenter;
float3 AngularVel = cross( OOBBWorldAngularVelocity.xyz, r );
output.velocity += AngularVel;
output.velocity = mul( WorldToLocal, output.velocity );
}
for (int i=0; i<3; ++i)
{
output.clip0[i] = dot( float4(output.cell0,1), OOBBClipPlane[i]);
output.clip1[i] = dot( float4(output.cell0,1), OOBBClipPlane[i+3]);
// Make box a voxel bigger in each direction
// BOX_EXPANSION - voxel diagonal length
//output.clip0[i] += BOX_EXPANSION;
//output.clip1[i] += BOX_EXPANSION;
}
return output;
}