74 lines
1.9 KiB
GLSL
74 lines
1.9 KiB
GLSL
#version 300 es
|
|
precision highp float;
|
|
|
|
// Inputs
|
|
in vec2 texture_coordinates;
|
|
uniform float time;
|
|
uniform sampler2D uSampler1;
|
|
uniform sampler2D uSampler2;
|
|
uniform vec3 camera_pos;
|
|
uniform vec3 camera_rot[3];
|
|
|
|
// Output
|
|
out vec4 color;
|
|
|
|
const float PI = 3.1415;
|
|
|
|
// Raymarching variables
|
|
#define MAX_ITERATIONS 20
|
|
#define MIN_TOLERANCE .01
|
|
|
|
//const vec3 camera_pos = vec3(0.);
|
|
const vec3 color1 = vec3(0.494, 0.361, 0.678);
|
|
const vec3 color2 = vec3(0.18, 0.945, 0.975);
|
|
|
|
// Scene Object (sphere)
|
|
|
|
// returns the distance from the ray to this sphere in the scene
|
|
float sphere_render(vec3 ray_pos, float radius, vec3 sphere_pos) {
|
|
return distance(ray_pos, sphere_pos) - radius;
|
|
}
|
|
|
|
float remap11(float val) {
|
|
return ((val - .5) * 2.);
|
|
}
|
|
|
|
// returns a vec3 of the vector transformed by the matrix
|
|
vec3 mat3_vec_mul(vec3 m[3], vec3 v) {
|
|
return v.x * m[0] + v.y * m[1] + v.z * m[2];
|
|
}
|
|
|
|
void main() {
|
|
|
|
// Set up camera and sphere object
|
|
vec3 ray_dir = normalize(vec3(remap11(texture_coordinates.x), remap11(texture_coordinates.y), 1.));
|
|
ray_dir = mat3_vec_mul(camera_rot, ray_dir);
|
|
vec3 ray_pos = camera_pos;
|
|
const vec3 sphere_pos = vec3(0., 0., 3.);
|
|
const float rad = 1.;
|
|
|
|
int i = 0;
|
|
for (; i < MAX_ITERATIONS; i++) {
|
|
float distance = sphere_render(ray_pos, rad, sphere_pos);
|
|
|
|
// Check If within tolerances
|
|
if (distance < MIN_TOLERANCE) {
|
|
break;
|
|
}
|
|
|
|
ray_pos += (distance * ray_dir);
|
|
}
|
|
color = vec4(mix(color1, color2, float(i) / float(MAX_ITERATIONS)), 1.);
|
|
|
|
// Image stuff for later
|
|
/*
|
|
if ((texture_coordinates.x + texture_coordinates.y) > 1.) {
|
|
color = texture(uSampler1, texture_coordinates);
|
|
}
|
|
else {
|
|
color = texture(uSampler2, texture_coordinates);
|
|
}*/
|
|
|
|
// Basic color time shift
|
|
// color = vec4( texture_coordinates, (sin( time * PI) + 1.)/2. , 1.);
|
|
}
|