simple tile heights

This commit is contained in:
2016-10-05 14:15:16 -07:00
parent d69223ef13
commit 193e807b6a
4 changed files with 123 additions and 88 deletions

View File

@@ -0,0 +1,28 @@
#version 150
in vec2 v_uv;
flat in uint v_tileidx;
out vec4 pixcolor;
uniform sampler2D t_atlas;
uniform b_constants {
//uvec4 animdata;
uint animdata;
float R1;
float R2;
};
uniform b_locals {
mat4 camera;
uint millis;
float treadmill_x;
float treadmill_y;
};
void main() {
vec2 anim_uv = v_uv;
//if (v_tileidx < 128u && bool(animdata[0 /*v_tileidx / 32u*/] & 1u << v_tileidx % 32u)) {
if (v_tileidx < 32u && bool(animdata & 1u << v_tileidx)) {
anim_uv = vec2(v_uv.x, float((uint(v_uv.y * 1000.0) + millis / 4u) % 1000u) / 1000.0);
}
vec2 uv = vec2(anim_uv.x, float(v_tileidx) / 256.0 + (1.0 - anim_uv.y) / 256.0);
pixcolor = texture(t_atlas, uv);
}

View File

@@ -0,0 +1,50 @@
#version 150
#define PI 3.1415926538
#define PI_CIRC (PI / 256.0)
#define TWO_PI_CIRC (2.0 * PI / 256.0)
in vec3 a_pos;
in vec2 a_uv;
in uint a_tileidx;
out vec2 v_uv;
flat out uint v_tileidx;
uniform b_trans {
mat4 u_matrix;
};
uniform b_constants {
//uvec4 animdata;
uint animdata;
float R1;
float R2;
};
uniform b_locals {
mat4 camera;
uint millis;
float treadmill_x;
float treadmill_y;
};
vec3 toroid(vec2 src, float r1, float r2, float r3) {
return vec3(r3 * -1.0 * sin(src.x), // use r3 instead of r2 for "deflated" torus
(r1 + r2 * cos(src.x)) * cos(src.y),
(r1 + r2 * cos(src.x)) * sin(src.y));
}
void main() {
v_uv = a_uv;
v_tileidx = a_tileidx;
vec2 thetaphi = vec2(TWO_PI_CIRC * (a_pos.x + treadmill_x),
TWO_PI_CIRC * (a_pos.y + treadmill_y));
float height = R1 * TWO_PI_CIRC;
vec3 normal = vec3(toroid(thetaphi, 0, height, height));
gl_Position = u_matrix * camera *
vec4(toroid(thetaphi, R1, R2, R1) + a_pos.z * normal, 1.0);
/*
gl_Position = u_matrix * camera *
vec4(R2 * -1.0 * sin(TWO_PI_CIRC * (a_pos.x + treadmill_x)),
(R1 + R2 * cos(TWO_PI_CIRC * (a_pos.x + treadmill_x))) * cos(TWO_PI_CIRC * (a_pos.z + treadmill_y)),
(R1 + R2 * cos(TWO_PI_CIRC * (a_pos.x + treadmill_x))) * sin(TWO_PI_CIRC * (a_pos.z + treadmill_y)),
1.0);
*/
}