#include #include #define K(a,b) ((IsKeyDown(KEY_##a)-IsKeyDown(KEY_##b))*GetFrameTime()) int main() { SetConfigFlags(FLAG_WINDOW_RESIZABLE | FLAG_VSYNC_HINT); InitWindow(1280, 720, "Runner"); if (!IsWindowReady()) return 1; Shader s = LoadShaderFromMemory(0, "#version 330\n" "uniform mat4 V,mvp;out vec4 o;" "void main(){vec2 r=2/vec2(mvp[0][0],-mvp[1][1]);vec3 q,p,v=normalize(gl_FragCoord.xyz*2-r.xyy);o=vec4(0);" "for(float z=0,d,i,l=0;l++<30;z+=d,o+=.1*(vec4(4,2,1,0)-tanh(p.y+4))*d/(1+z)){" "p=(z*v-V[3].xyz)*mat3(V);for(q=p,d=p.y,i=40;i>.01;i*=.2){q=i*.9-abs(mod(q,i+i)-i);" "d=max(d,min(min(q.x,q.y),q.z));q.xz*=mat2(cos(9),-sin(9),sin(9),cos(9));}}o=tanh(o*o);o.a=1;}"); int v = GetShaderLocation(s, "V"); if (v < 0) return 1; Camera c = {{-5,-2,-5}, {-5,-2,-6}, {0,1,0}, 0, 0}; SetTargetFPS(60); while (!WindowShouldClose()) { if (IsWindowFocused()) { CameraPitch(&c, K(I,K)*PI/2, 0, 0, 1); CameraYaw(&c, K(J,L)*PI/2, 0); CameraRoll(&c, K(E,Q)*PI/2); CameraMoveForward(&c, K(W,S)*5.4f, 0); CameraMoveRight(&c, K(D,A)*5.4f, 0); CameraMoveUp(&c, K(SPACE,LEFT_SHIFT)*5.4f); } SetShaderValueMatrix(s, v, GetCameraMatrix(c)); BeginDrawing(); BeginShaderMode(s); DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), WHITE); EndShaderMode(); EndDrawing(); } }