☰
✎ Ray Marching
bearbeiten
Bereit
Vertex Shader
Kopieren
attribute vec2 a_position; void main() { gl_Position = vec4(a_position, 0.0, 1.0); }
Fragment Shader
Kopieren
precision mediump float; uniform float u_time; uniform vec2 u_resolution; uniform vec3 u_cameraPos; uniform float u_cameraFov; float sdSphere(vec3 p, float r) { return length(p) - r; } float map(vec3 p) { return sdSphere(p, 0.8); } vec3 getNormal(vec3 p) { float d = map(p); vec2 e = vec2(0.001, 0.0); return normalize(d - vec3(map(p-e.xyy), map(p-e.yxy), map(p-e.yyx))); } void main() { vec2 uv = (gl_FragCoord.xy - 0.5*u_resolution.xy) / u_resolution.y; vec3 ro = u_cameraPos; vec3 rd = normalize(vec3(uv, -1.0 / tan(radians(u_cameraFov) * 0.5))); float t = 0.0; for (int i = 0; i < 64; i++) { vec3 p = ro + rd * t; float d = map(p); if (d < 0.001 || t > 10.0) break; t += d; } vec3 col = vec3(0.05); if (t < 10.0) { vec3 p = ro + rd * t; vec3 n = getNormal(p); vec3 light = normalize(vec3(sin(u_time), 1.0, cos(u_time))); float diff = max(dot(n, light), 0.0); float spec = pow(max(dot(reflect(-light, n), -rd), 0.0), 32.0); col = vec3(0.2, 0.5, 0.9) * diff + vec3(1.0) * spec * 0.5; } gl_FragColor = vec4(col, 1.0); }
💾 Speichern
⬇ Export JSON
← Zurück
Live-Vorschau
FPS: --
↻ Neu laden
⏸ Pause