Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
uniform vec4 curve[8];
|
||||
varying vec2 uv;
|
||||
varying vec3 pos, normal;
|
||||
|
||||
vec4 bezier(float x) {
|
||||
vec4 lerp_a[7], lerp_b[6];
|
||||
|
||||
for(int i = 0; i < 7; ++i)
|
||||
lerp_a[i] = mix(curve[i], curve[i+1], x);
|
||||
for(int i = 0; i < 6; ++i)
|
||||
lerp_b[i] = mix(lerp_a[i], lerp_a[i+1], x);
|
||||
for(int i = 0; i < 5; ++i)
|
||||
lerp_a[i] = mix(lerp_b[i], lerp_b[i+1], x);
|
||||
for(int i = 0; i < 4; ++i)
|
||||
lerp_b[i] = mix(lerp_a[i], lerp_a[i+1], x);
|
||||
for(int i = 0; i < 3; ++i)
|
||||
lerp_a[i] = mix(lerp_b[i], lerp_b[i+1], x);
|
||||
for(int i = 0; i < 2; ++i)
|
||||
lerp_b[i] = mix(lerp_a[i], lerp_a[i+1], x);
|
||||
|
||||
return mix(lerp_b[0], lerp_b[1], x);
|
||||
}
|
||||
|
||||
//Rotate about z (x is known to be 0)
|
||||
vec3 rotate(vec3 pt, float rad) {
|
||||
return vec3(pt.y * -sin(rad), pt.y * cos(rad), pt.z);
|
||||
}
|
||||
|
||||
void main() {
|
||||
uv = gl_MultiTexCoord0.xy;
|
||||
vec4 offset = bezier(uv.x);
|
||||
|
||||
vec3 n = gl_Vertex.xyz; n.x = 0.0;
|
||||
n = rotate(vec3(0.0, n.yz), offset.w);
|
||||
normal = normalize(gl_NormalMatrix * n);
|
||||
|
||||
vec3 vert = offset.xyz + rotate(vec3(0, gl_Vertex.yz), offset.w - 0.135);
|
||||
|
||||
vec4 postMV = gl_ModelViewMatrix * vec4(vert, gl_Vertex.w);
|
||||
pos = (gl_ModelViewMatrix * offset).xyz;
|
||||
|
||||
gl_Position = gl_ProjectionMatrix * postMV;
|
||||
}
|
||||
Reference in New Issue
Block a user