feat!: raymarcher init with movement
This commit is contained in:
parent
f6c2f2d3d7
commit
5b6d03e1c8
1 changed files with 47 additions and 1 deletions
|
@ -6,20 +6,66 @@ in vec2 texture_coordinates;
|
||||||
uniform float time;
|
uniform float time;
|
||||||
uniform sampler2D uSampler1;
|
uniform sampler2D uSampler1;
|
||||||
uniform sampler2D uSampler2;
|
uniform sampler2D uSampler2;
|
||||||
|
uniform vec3 camera_pos;
|
||||||
|
|
||||||
// Output
|
// Output
|
||||||
out vec4 color;
|
out vec4 color;
|
||||||
|
|
||||||
const float PI = 3.1415;
|
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() {
|
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.) {
|
if ((texture_coordinates.x + texture_coordinates.y) > 1.) {
|
||||||
color = texture(uSampler1, texture_coordinates);
|
color = texture(uSampler1, texture_coordinates);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
color = texture(uSampler2, texture_coordinates);
|
color = texture(uSampler2, texture_coordinates);
|
||||||
}
|
}*/
|
||||||
|
|
||||||
|
// Basic color time shift
|
||||||
// color = vec4( texture_coordinates, (sin( time * PI) + 1.)/2. , 1.);
|
// color = vec4( texture_coordinates, (sin( time * PI) + 1.)/2. , 1.);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue