jotain pientä aloitettu
This commit is contained in:
@ -13,10 +13,31 @@ vec2 getUV() {
|
||||
return gl_FragCoord.xy * scale - 1.0;
|
||||
}
|
||||
|
||||
mat2 rot2D(float angle) {
|
||||
float s = sin(angle);
|
||||
float c = cos(angle);
|
||||
return mat2(c, -s, s, c);
|
||||
}
|
||||
|
||||
float noise(in vec2 xy, in float seed) {
|
||||
return fract(tan(distance(xy * PHI, xy) * seed) * xy.x);
|
||||
}
|
||||
|
||||
float getScaledFFT(int index, float scale, float offset) {
|
||||
// Clamp index to valid range
|
||||
index = clamp(index, 0, 511);
|
||||
|
||||
// Get raw FFT value
|
||||
float raw = fft_output[index];
|
||||
|
||||
// Apply logarithmic scaling: log(1 + value * scale) + offset
|
||||
return log(1.0 + raw * scale) + offset;
|
||||
}
|
||||
|
||||
/////////////////
|
||||
// GEOMETRY //
|
||||
/////////////////
|
||||
|
||||
// Hexagonal prism, circumcircle variant
|
||||
float fHexagonCircumcircle(vec3 p, vec2 h) {
|
||||
vec3 q = abs(p);
|
||||
@ -30,20 +51,27 @@ float sdHex(vec3 pos, float i, float angle) {
|
||||
return d1;
|
||||
}
|
||||
|
||||
float getScaledFFT(int index, float scale, float offset) {
|
||||
// Clamp index to valid range
|
||||
index = clamp(index, 0, 511);
|
||||
|
||||
// Get raw FFT value
|
||||
float raw = fft_output[index];
|
||||
|
||||
// Apply logarithmic scaling: log(1 + value * scale) + offset
|
||||
return log(1.0 + raw * scale) + offset;
|
||||
float sdSphere(vec3 p, float r){
|
||||
return length(p) -r;
|
||||
}
|
||||
|
||||
// Modify your mapScene function
|
||||
//////////////
|
||||
// SCENE //
|
||||
//////////////
|
||||
|
||||
// instructions -> opU( { float to union with } , vec2( {put shape here}, {put material here} ) )
|
||||
vec2 opU( vec2 d1, vec2 d2 )
|
||||
{
|
||||
return (d1.x<d2.x) ? d1 : d2;
|
||||
}
|
||||
|
||||
float opU( float d1, float d2 ) { return -max( -d1, -d2 ); }
|
||||
|
||||
vec2 mapScene(in vec3 p) {
|
||||
float mat = 0.;
|
||||
|
||||
vec2 res = vec2( p.y, 0.0 );
|
||||
|
||||
float mat = 1.;
|
||||
float d = 1e9;
|
||||
float a = 0.;
|
||||
|
||||
@ -56,7 +84,7 @@ vec2 mapScene(in vec3 p) {
|
||||
float hexGap = 0.2;
|
||||
|
||||
for(float j = 0.; j < 16.; j++) {
|
||||
vec3 po = p;
|
||||
vec3 po = p-vec3(-2.0,-5., 0.0);
|
||||
po += vec3((1.6 + hexGap) * 8, -5., -(1.88 + hexGap) * 10);
|
||||
po += vec3(0, 0., (1.88 + hexGap) * j);
|
||||
|
||||
@ -78,17 +106,25 @@ vec2 mapScene(in vec3 p) {
|
||||
//float hexSize = fft_output[hexDist] * 5.0;
|
||||
float hexSize = getScaledFFT(hexDist, 15.0, 0.0) * 2.0; // Adjusted multiplier
|
||||
a = sdHex(po, 1. + hexSize, 0.);
|
||||
d = min(d, a);
|
||||
|
||||
if(d == a) {
|
||||
mat = 1.;
|
||||
}
|
||||
//d = min(d, a);
|
||||
res = opU(res, vec2(a, 2.));
|
||||
}
|
||||
}
|
||||
|
||||
return vec2(d, mat);
|
||||
|
||||
|
||||
res = opU( res, vec2( sdSphere(p-vec3(-2.0,4., 0.0), 2. ), 1.));
|
||||
|
||||
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
////////////////
|
||||
// RAYCAST //
|
||||
////////////////
|
||||
|
||||
vec3 castRay(vec3 ro, vec3 rd, inout vec3 pos) {
|
||||
float t = 0.;
|
||||
float mat = 0.;
|
||||
@ -114,6 +150,10 @@ vec3 castRay(vec3 ro, vec3 rd, inout vec3 pos) {
|
||||
return vec3(t, mat, hit);
|
||||
}
|
||||
|
||||
////////////////
|
||||
// SHADING //
|
||||
////////////////
|
||||
|
||||
float softshadow(in vec3 ro, in vec3 rd, float mint, float maxt, float w) {
|
||||
float res = 1.0;
|
||||
float t = mint;
|
||||
@ -188,18 +228,6 @@ vec3 addPointLight(vec3 lightPos, vec3 lightColor, float intensity, vec3 worldPo
|
||||
}
|
||||
*/
|
||||
|
||||
float getAmbientOcc(vec3 p, vec3 n) {
|
||||
float occ = 0.;
|
||||
float weight = 1.;
|
||||
for(int i = 0; i < 8; i++) {
|
||||
float len = 0.01 + 0.02 * float(i * i);
|
||||
float dist = mapScene(p + n * len).x;
|
||||
occ += (len - dist) * weight;
|
||||
weight *= 0.85;
|
||||
}
|
||||
return 1.0 - clamp(0.6 * occ, 0., 1.);
|
||||
}
|
||||
|
||||
vec3 shading(vec3 v, vec3 n, vec3 dir, float material) {
|
||||
float shininess = 0.01;
|
||||
|
||||
@ -226,9 +254,11 @@ vec3 shading(vec3 v, vec3 n, vec3 dir, float material) {
|
||||
}
|
||||
|
||||
vec3 lights = vec3(0.);
|
||||
lights += addPointLight(vec3(-10., 10.0, 0.), vec3(0.77, 0.26, 0.73), 3.0, v, dir, n, shininess);
|
||||
lights += addPointLight(vec3(0., 10.0, -5.0), vec3(0.08, 0.62, 0.75), 3.0, v, dir, n, shininess);
|
||||
lights += addPointLight(vec3(0., 25.0, 0.0), vec3(0.5137, 0.1961, 0.7725), 3.0, v, dir, n, shininess);
|
||||
lights += addPointLight(vec3(0., 40.0, -10.), vec3(0.77, 0.26, 0.73), 3.0, v, dir, n, shininess);
|
||||
lights += addPointLight(vec3(0., 2.0, -5.0), vec3(0.08, 0.62, 0.75), 3.0, v, dir, n, shininess);
|
||||
//lights += addPointLight(vec3(0., 25.0, 0.0), vec3(0.5137, 0.1961, 0.7725), 3.0, v, dir, n, shininess);
|
||||
|
||||
lights += addPointLight(vec3(0., 20.0, 15.), vec3(0.77, 0.26, 0.73), 3.0, v, dir, n, shininess);
|
||||
|
||||
vec3 lightDir = vec3(0., 1., -3);
|
||||
//float sun_dif = clamp(dot(n, lightDir), 0., 1.);
|
||||
@ -272,63 +302,31 @@ vec3 postProcess(vec3 col) {
|
||||
return col;
|
||||
}
|
||||
|
||||
vec3 getCameraRay(vec2 uv, vec3 camPos, vec3 camTarget, float fov) {
|
||||
// Calculate camera's orthonormal basis
|
||||
vec3 camForward = normalize(camTarget - camPos);
|
||||
vec3 camRight = normalize(cross(vec3(0.0, 1.0, 0.0), camForward));
|
||||
vec3 camUp = normalize(cross(camForward, camRight));
|
||||
//////////////////
|
||||
// RENDERING //
|
||||
//////////////////
|
||||
|
||||
vec3 rayDir = normalize(uv.x * camRight + uv.y * camUp + camForward * fov);
|
||||
|
||||
return rayDir;
|
||||
vec3 getCameraRayDir(vec2 uv, vec3 camPos, vec3 camTarget, float fov)
|
||||
{
|
||||
vec3 f = normalize(camTarget-camPos),
|
||||
r = normalize(cross(vec3(0,1,0), f)),
|
||||
u = cross(f,r),
|
||||
c = f*fov,
|
||||
i = c + uv.x*r + uv.y*u,
|
||||
d = normalize(i);
|
||||
return d;
|
||||
}
|
||||
|
||||
// Camera positioning function
|
||||
vec3 getCameraPosition(float time, int cameraMode) {
|
||||
vec3 camPos;
|
||||
camPos = vec3(0.0, 30.0, -10.0);
|
||||
|
||||
if(cameraMode == 1) {
|
||||
// Orbiting camera
|
||||
vec3 camTarget = vec3(0.0, 0.0, -20.0);
|
||||
float orbitRadius = 20.0;
|
||||
float orbitSpeed = 0.2;
|
||||
float orbitHeight = 10.0;
|
||||
float angle = time * orbitSpeed;
|
||||
camPos = camTarget + vec3(cos(angle) * orbitRadius, orbitHeight + sin(time * 0.8) * 2.0, sin(angle) * orbitRadius);
|
||||
} else if(cameraMode == 2) {
|
||||
// Smooth camera movement
|
||||
float t = time * 0.06;
|
||||
camPos = vec3(sin(t) * 15.0, 30.0 + cos(t * 0.5) * 5.0, cos(t) * 15.0);
|
||||
} else if(cameraMode == 3) {
|
||||
// First person style movement
|
||||
float walkSpeed = 2.0;
|
||||
camPos = vec3(sin(time * walkSpeed) * 0.1, 8.0 + sin(time * walkSpeed * 2.0) * 0.05, time * 0.5);
|
||||
}
|
||||
|
||||
return camPos;
|
||||
}
|
||||
|
||||
// Main camera function that combines everything
|
||||
vec3 setupCamera(vec2 uv, float time, int positionMode) {
|
||||
vec3 camPos = getCameraPosition(time, positionMode);
|
||||
vec3 camTarget = vec3(0.0, -1.0, 10.0); // Adjust target as needed
|
||||
float fov = 1.;
|
||||
|
||||
return getCameraRay(uv, camPos, camTarget, fov);
|
||||
}
|
||||
|
||||
// Simplified version of your render function using the new camera system
|
||||
vec3 render(vec2 uv) {
|
||||
// Choose camera modes:
|
||||
// Position: 0=static, 1=orbit, 2=smooth, 3=walk
|
||||
// Ray: 0=standard, 1=zoom, 2=dof
|
||||
int positionMode = 2; // Static
|
||||
|
||||
vec3 rayDir = setupCamera(uv, u_time, positionMode);
|
||||
vec3 camPos = getCameraPosition(u_time, positionMode);
|
||||
vec3 camPos = vec3(0.0, 20.0, -10.0);
|
||||
vec3 camTarget = vec3(0.0, -1.0, 10.0); // Adjust target as needed
|
||||
float fov = 1.0;
|
||||
|
||||
vec3 rayDir = getCameraRayDir(uv, camPos, camTarget, fov);
|
||||
|
||||
vec3 col = vec3(0.); // background color
|
||||
|
||||
vec3 col = vec3(0.102, 0.2431, 0.3412);
|
||||
vec3 hitPos = vec3(0);
|
||||
vec3 t = castRay(camPos, rayDir, hitPos);
|
||||
|
||||
@ -341,11 +339,7 @@ vec3 render(vec2 uv) {
|
||||
}
|
||||
|
||||
void main() {
|
||||
|
||||
vec3 finalColor = render(getUV());
|
||||
|
||||
//finalColor = postProcess(finalColor);
|
||||
|
||||
o = vec4(finalColor, 1.);
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user