Test
This commit is contained in:
@@ -0,0 +1,161 @@
|
||||
/*
|
||||
HOW TO USE:
|
||||
edit functions "cust1 cust2 cust3" for custom functions 7 8 and 9.
|
||||
The distortion function is in "geomfunc".
|
||||
cam is player eye position, to make F5 model viewing easy,
|
||||
you don't have to use this in the functions.
|
||||
|
||||
|
||||
NOTES:
|
||||
P is gl_Vertex.
|
||||
p is P.xyz-eye.
|
||||
dpos is velocity (jittery at the moment, not sure why).
|
||||
|
||||
*/
|
||||
|
||||
#include "uniforms.glsl"
|
||||
#include "functionlibs.glsl"
|
||||
|
||||
const float E = 2.718281828459045;
|
||||
const float PI= 3.14159265359;
|
||||
vec3 dir=playerLookVector;
|
||||
//CUSTOM WARP FUNCTIONS
|
||||
// pos | velocity|campos |headpos |dist | variable| pos xyz |time | world pos |
|
||||
vec3 cust1(vec3 p,vec3 vel,vec3 cam,vec3 eye,float d, float J, float x,float y,float z,float t,float X,float Y,float Z){
|
||||
|
||||
p=mat3(gbufferModelView)*p;
|
||||
p.z-=d/1.1;
|
||||
p=mat3(gbufferModelViewInverse)*p;
|
||||
|
||||
return p;
|
||||
}
|
||||
|
||||
vec4 rot4(vec4 p,vec4 q){
|
||||
return(qmul(qmul(q,p),-q));
|
||||
|
||||
}
|
||||
vec3 torusify(vec3 p,vec3 cam,float J){
|
||||
float K=J/2;
|
||||
p.y=tanh((p.y-cam.y)/K)*K;
|
||||
p.y-=K;
|
||||
|
||||
p.xy=vec2(-sin(p.x*PI/J)*p.y,cos(p.x*PI/J)*p.y)+vec2(0,K);
|
||||
p.y+=K;
|
||||
p.zy=vec2(sin(p.z*PI/J)*p.y,cos(p.z*PI/J)*p.y)-vec2(0,K);
|
||||
return p;
|
||||
}
|
||||
vec3 camtor(vec3 cam,vec3 vx,float J){
|
||||
return vx;
|
||||
}
|
||||
|
||||
vec3 cust2(vec3 p,vec3 vel,vec3 cam,vec3 eye,float d, float J, float x,float y,float z,float t,float X,float Y,float Z){
|
||||
p=torusify(p+cam,cam,J)-torusify(cam,cam,J);
|
||||
|
||||
vec3 vx=normalize(torusify(cam+vec3(0.01,0,0),cam,J)-torusify(cam,cam,J));
|
||||
vec3 vy=normalize(torusify(cam+vec3(0,0.01,0),cam,J)-torusify(cam,cam,J));
|
||||
vec3 vz=normalize(torusify(cam+vec3(0,0,0.01),cam,J)-torusify(cam,cam,J));
|
||||
mat3 dirc=mat3(vx,vy,vz);
|
||||
p=inverse(dirc)*p;
|
||||
return p;
|
||||
}
|
||||
|
||||
vec3 cust3(vec3 p,vec3 vel,vec3 cam,vec3 eye,float d, float J, float x,float y,float z,float t,float X,float Y,float Z){
|
||||
float a=(sin(t/6)*d)/J;
|
||||
|
||||
mat3 NIL = mat3(
|
||||
cos(a),0,-sin(a),
|
||||
0,1,0,
|
||||
sin(a),0,cos(a));
|
||||
|
||||
return p*NIL;
|
||||
}
|
||||
|
||||
|
||||
#define MODE 0 // [0 1 2 3 4 5 6 7 8 9]
|
||||
#define J 16 // [1 2 4 8 16 32 64 128 256 512]
|
||||
|
||||
#define f5_distance 1 // [1 2 3 4 5 6 7 8 9 10]
|
||||
|
||||
|
||||
//this is the function that warps space
|
||||
vec4 geomfunc(vec4 P){
|
||||
//basic variables
|
||||
vec3 cam=eyePosition;
|
||||
vec3 eye=relativeEyePosition;
|
||||
vec3 p=P.xyz+eye;
|
||||
|
||||
vec3 dpos=(cameraPosition-previousCameraPosition)/frameTime;
|
||||
float x=p.x,y=p.y,z=p.z,w=gl_Vertex.w,t=(frameTimeCounter);
|
||||
float X=x+cameraPosition.x,Y=y+cameraPosition.y,Z=z+cameraPosition.z;
|
||||
float d=length(p.xyz)/J;
|
||||
//Solv geodesic approximation matrix that I found myself.
|
||||
vec2 o =rot(vec2(J,0),frameTimeCounter);
|
||||
|
||||
mat3 SOLV=mat3(
|
||||
pow(2,-y/J), 0, 0,
|
||||
x/J, 1, -z/J,
|
||||
0, 0, pow(2,y/J));
|
||||
|
||||
|
||||
switch (MODE){
|
||||
|
||||
case 0:
|
||||
p=inv(p,vec3(o.y,0,o.x));;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
p=inv(p,vec3(o.x,o.y,0));;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
p=inv(p,vec3(0,o.x,o.y));;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
p+=dpos*d/J;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
p=inv(p,vec3(0,J,0));;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
p=inv(p,vec3(0,-J,0));;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
p=p*SOLV;;
|
||||
break;
|
||||
|
||||
//custom 1
|
||||
case 7:
|
||||
p=cust1(p,dpos,cam,eye,length(p.xyz),J,x,y,z,t,X,Y,Z);
|
||||
break;
|
||||
|
||||
//custom 2
|
||||
case 8:
|
||||
p=cust2(p,dpos,cam,eye,length(p.xyz),J,x,y,z,t,X,Y,Z);
|
||||
break;
|
||||
|
||||
//custom 3
|
||||
case 9:
|
||||
p=cust3(p,dpos,cam,eye,length(p.xyz),J,x,y,z,t,X,Y,Z);
|
||||
break;
|
||||
|
||||
default:
|
||||
p=p;
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
return vec4(p-(eye*f5_distance),gl_Vertex.w);
|
||||
}
|
||||
/*
|
||||
vec3 cust1(vec3 p,vec3 velocity,vec3 cam,vec3 eye,float d, float J, float x,float y,float z,float t,float X,float Y,float Z){
|
||||
p=mat3(gbufferModelView)*p;
|
||||
p.z-=d/1.1;
|
||||
p=mat3(gbufferModelViewInverse)*p;
|
||||
|
||||
return p;
|
||||
}
|
||||
*/
|
||||
Reference in New Issue
Block a user