feat!: raymarcher init with movement

This commit is contained in:
stitchy 2024-12-18 07:37:57 +00:00
parent f6c2f2d3d7
commit 5b6d03e1c8
Signed by: stitchy
SSH key fingerprint: SHA256:yz2SoxdnY67tfY5Jzb0f2v8f5W3o/IF359kbcquWip8

View file

@ -6,20 +6,66 @@ in vec2 texture_coordinates;
uniform float time;
uniform sampler2D uSampler1;
uniform sampler2D uSampler2;
uniform vec3 camera_pos;
// 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.827, 0.945, 0.875);
// 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.);
}
void main() {
// Set up camera and sphere object
vec3 ray_dir = normalize(vec3( remap11(texture_coordinates.x) , remap11(texture_coordinates.y), 1.));
vec3 ray_pos = camera_pos;
const vec3 sphere_pos = vec3(0.,0.,3.);
const float rad = 1.;
for(int i = 0; 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.);
}