Triangle Grid
https://gyazo.com/054014377f0640df25ff0c29fb2785b7
code:glsl
const float SIZE = 1.0;
const float SQRT3 = sqrt(3.0);
struct Triangle {
vec2 cell;
vec2 coord;
vec3 id;
float isUp;
};
Triangle findNearestTriangle(vec2 p) {
const mat2 MAT_SKEW = mat2(1.0, 1.0 / SQRT3, 0.0, 2.0 / SQRT3);
const mat2 INV_MAT_SKEW = mat2(1.0, -0.5, 0.0, SQRT3 / 2.0);
vec2 pt = p / SIZE * MAT_SKEW;
vec2 cell = floor(pt);
vec2 coord = pt - cell;
float isUp = step(coord.x, coord.y);
vec2 center = cell + 0.5 + mix(
vec2(1.0, -1.0),
vec2(-1.0, 1.0),
isUp
) / 6.0;
Triangle tri;
tri.id = vec3(cell, isUp);
tri.coord = mix(coord, 1.0 - coord, isUp) - vec2(2.0, 1.0) / 3.0;
tri.cell = center * SIZE * INV_MAT_SKEW;
tri.isUp = isUp;
return tri;
}