Torus
A torus is defined by two parameters: the major radius, and the minor radius. The major radius (t.x
) is the radius of the big ring (in red in the diagram), and the minor radius (t.y
) is the radius of the circular cross-section. The x
and y
here are just indices into the vector: they're unrelated to the x and y axes.
The left side of the diagram shows the xz plane, and the right side shows a cross-section with y going horizontally.
p.xz
is the projection of the point onto the plane of the torus, so length(p.xz)-t.x
gives the distance from that projected point to the inside of the torus. (I've labelled it $r$ on the diagram.) p.y
is the distance from the point to the plane of the torus, so the length of the vector ($r$, p.y
) is the distance from the point to the inside of the torus. (Computing the length of a two-element vector is a handy way to use Pythagoras' theorem to find the hypotenuse of the triangle.)
Cone
Like the torus, the cone code uses the fact that the shape is symmetric about an axis: the z axis in this case. The cone is defined by a unit vector c
that's normal to the surface of the cone, and the apex of the cone is at the origin. Similar to the above, length(p.xy)
gets the distance from the point to the z axis, so that we can work in the plane where the cone is a triangle. vec2(q,p.z)
is the projection of p
into this plane. The dot product projects this vector onto the direction c
: how far the point is along this direction tells us how far it is from the surface of the triangle.