#include "fluid_common.hlsli"

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.xyz;

        float3 r = mul(LocalToWorld, float4(output.cell0, 1)).xyz - MassCenter.xyz;

        float3 AngularVel = cross(OOBBWorldAngularVelocity.xyz, r);

        output.velocity += AngularVel;

        output.velocity = mul((float3x3)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;
    // }

	output.clip0.x = dot(float4(output.cell0, 1), OOBBClipPlane[0]);
	output.clip0.y = dot(float4(output.cell0, 1), OOBBClipPlane[1]);
	output.clip0.z = dot(float4(output.cell0, 1), OOBBClipPlane[2]);
	
	output.clip1.x = dot(float4(output.cell0, 1), OOBBClipPlane[3]);
	output.clip1.y = dot(float4(output.cell0, 1), OOBBClipPlane[4]);
	output.clip1.z = dot(float4(output.cell0, 1), OOBBClipPlane[5]);

    return output;
}

