Building Worlds With Distance Functions in GLSL (Raymarching)




Article index:


4 – Raymarching: Floor + Torus

Build Worlds With Distance Functions in GLSL, GLSL Hacker
Raymarching: floor + torus



This time the only new function is the one that generates the torus:

vec2 obj_torus(in vec3 p)
{
  vec2 r = vec2(2.1,0.5);
  vec2 q = vec2(length(p.xz)-r.x,p.y);
  float d = length(q)-r.y;
  return vec2(d,1);
}

The torus has two params: the radius (2.1) and the section radius (0.5).

Like for the sphere, we update the distance_to_obj() function:

vec2 distance_to_obj(in vec3 p)
{
  return obj_union(obj_floor(p), obj_torus(p));
}






Article index:



4 thoughts on “Building Worlds With Distance Functions in GLSL (Raymarching)”

  1. GLSLnoob42

    Hey. Just found this. Came across iq’s stuff a while ago, but being a noob I couldn’t do anything with it.

    Then while rediscovering GLSL & iq’s website, I found this awesome resource!

    But here’s the thing, I can’t get it to work. ;o)

    I eventually found 2 errors in the code. Here are the fixes:
    line 97: d.x-distance_to_obj(p-e.yyx).x); // had an extra “)”
    line 98: N = normalize(n); // was missing “;”

    I’m trying to use GLSL Hacker 0.6.0.0 & Blender 2.69 using this tutorial:

    http://en.wikibooks.org/wiki/GLSL_Programming/Blender/Minimal_Shader

    Any help?

    peace & 42

  2. toba

    I too found the errors but cant get any of this to work. There are too few good examples online, it would be nice to get one working

Comments are closed.