You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
2.5 KiB
Plaintext

/******************************************************************************/
/*
Project - MudBun
Publisher - Long Bunny Labs
http://LongBunnyLabs.com
Author - Ming-Lun "Allen" Chou
http://AllenChou.net
*/
/******************************************************************************/
#ifndef MUDBUN_CATMULL_ROM
#define MUDBUN_CATMULL_ROM
float bezier_quad(float p0, float p1, float p2, float t)
{
return lerp(lerp(p0, p1, t), lerp(p1, p2, t), t);
}
float2 bezier_quad(float2 p0, float2 p1, float2 p2, float t)
{
return lerp(lerp(p0, p1, t), lerp(p1, p2, t), t);
}
float3 bezier_quad(float3 p0, float3 p1, float3 p2, float t)
{
return lerp(lerp(p0, p1, t), lerp(p1, p2, t), t);
}
float4 bezier_quad(float4 p0, float4 p1, float4 p2, float t)
{
return lerp(lerp(p0, p1, t), lerp(p1, p2, t), t);
}
float bezier_quad_grad(float p0, float p1, float p2, float t)
{
float t2 = t + t;
return p0 * (t2 - 2.0f) + p1 * (2.0f - t2 - t2) + p2 * t2;
}
float2 bezier_quad_grad(float2 p0, float2 p1, float2 p2, float2 t)
{
float2 t2 = t + t;
return p0 * (t2 - 2.0f) + p1 * (2.0f - t2 - t2) + p2 * t2;
}
float3 bezier_quad_grad(float3 p0, float3 p1, float3 p2, float3 t)
{
float3 t2 = t + t;
return p0 * (t2 - 2.0f) + p1 * (2.0f - t2 - t2) + p2 * t2;
}
float4 bezier_quad_grad(float4 p0, float4 p1, float4 p2, float4 t)
{
float4 t2 = t + t;
return p0 * (t2 - 2.0f) + p1 * (2.0f - t2 - t2) + p2 * t2;
}
float catmull_rom(float p0, float p1, float p2, float p3, float t)
{
float tt = t * t;
return
0.5f
* ((2.0f * p1)
+ (-p0 + p2) * t
+ (2.0f * p0 - 5.0f * p1 + 4.0f * p2 - p3) * tt
+ (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * tt * t
);
}
float2 catmull_rom(float2 p0, float2 p1, float2 p2, float2 p3, float t)
{
float tt = t * t;
return
0.5f
* ((2.0f * p1)
+ (-p0 + p2) * t
+ (2.0f * p0 - 5.0f * p1 + 4.0f * p2 - p3) * tt
+ (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * tt * t
);
}
float3 catmull_rom(float3 p0, float3 p1, float3 p2, float3 p3, float t)
{
float tt = t * t;
return
0.5f
* ((2.0f * p1)
+ (-p0 + p2) * t
+ (2.0f * p0 - 5.0f * p1 + 4.0f * p2 - p3) * tt
+ (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * tt * t
);
}
float4 catmull_rom(float4 p0, float4 p1, float4 p2, float4 p3, float t)
{
float tt = t * t;
return
0.5f
* ((2.0f * p1)
+ (-p0 + p2) * t
+ (2.0f * p0 - 5.0f * p1 + 4.0f * p2 - p3) * tt
+ (-p0 + 3.0f * p1 - 3.0f * p2 + p3) * tt * t
);
}
#endif