diff options
| author | yum <yum.food.vr@gmail.com> | 2025-10-28 21:33:40 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2025-10-28 21:33:40 -0700 |
| commit | 15f9778a65a0f163627bd229b8f212cc5c7c0c22 (patch) | |
| tree | b4b6c90defa76b9086b3b1f02bcd2a6401e019e7 /math.cginc | |
| parent | 6c93421c1a10caf9e4f6996e1109379a504c19a7 (diff) | |
some ray marching
Diffstat (limited to 'math.cginc')
| -rw-r--r-- | math.cginc | 43 |
1 files changed, 39 insertions, 4 deletions
@@ -1,10 +1,21 @@ #ifndef __MATH_INC #define __MATH_INC -#define PI 3.14159265358979f -#define RCP_PI (1.0f / PI) -#define TAU (2.0f * PI) -#define SQRT_3 1.73205081f +#define PI 3.14159265358979323846264f +#define TAU (2.0f * PI) +#define HALF_PI (PI * 0.5f) +#define RCP_PI (1.0f / PI) +#define RCP_TAU (1.0f / TAU) +#define PHI 1.618033989f +#define RCP_PHI 0.618033989f +#define SQRT_2 1.414213562f +#define SQRT_2_RCP 0.707106781f +#define RCP_SQRT_2 0.707106781f +#define RCP_SQRT_3 0.577350269f +#define TWO_OVER_THREE 0.6666666666666666f +#define SQRT_3 1.73205081f +#define SQRT_3_OVER_2 0.8660254037844386f +#define EULERS_CONSTANT 2.718281828f float sin_noise_3d(float3 uvw) { return sin(uvw[0]) * sin(uvw[1]) * sin(uvw[2]); @@ -39,5 +50,29 @@ float wrapDotProduct(float XoY, float k) { } } +// Vector rotation with a quaternion +// https://blog.molecular-matters.com/2013/05/24/a-faster-quaternion-vector-multiplication/ +float3 rotate_vector(float3 v, float4 q) +{ + float3 t = 2.0 * cross(q.xyz, v); + return v + q.w * t + cross(q.xyz, t); +} + +// Cartesian to cube hexagonal coordinates. +// Based on this: https://backdrifting.net/post/064_hex_grids +float3 cart_to_hex(float2 cart) { + float p = cart.x; + float q = dot(cart, float2(0.5f, SQRT_3_OVER_2)); + float r = dot(cart, float2(0.5f, -SQRT_3_OVER_2)); + + return float3(p, q, r) * TWO_OVER_THREE; +} + +float2 hex_to_cart(float3 cart) { + return float2( + cart[0] + (cart[1] + cart[2]) * 0.5f, + (cart[1] - cart[2]) * SQRT_3_OVER_2); +} + #endif // __MATH_INC |
