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
HLSL
107 lines
2.5 KiB
HLSL
/******************************************************************************/
|
|
/*
|
|
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
|