Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines
(+1)

I implemented the tiger, sphone, and duospindle here (specifically at 7:03):

The Duo-spindle was really cool.  I didn't have to round the manifold to get a good result which was surprising, and it had some interesting features.  

It got cut off in the video, but here's the projection function I used for the duospindle in the video:

Proj::proj(vector: vec4) -> vec4 {
    let xy: vec4 = vec4(vector.x, vector.y, 0, 0);
    let xy_len: f32 = length(xy);
    let zw: vec4 = vec4(0, 0, vector.z, vector.w);
    let zw_len: f32 = length(zw);
    let d: f32 = clamp(xy_len - zw_len, -r, r);
    let xy_component: vec4 = select(
        normalize(xy),
        vec4(0, 0, 0, 0),
        xy_len == 0
    ) * (r + d);
    let zw_component: vec4 = select(
        normalize(zw),         
        vec4(0, 0, 0, 0),
        zw_len == 0
    ) * (r - d);
    (xy_component + zw_component) / 2
}

The rest of the basic shape code is at 14:31

I'll try some of the other manifolds soon, the pinched duo-cylinder looks interesting.

Your projection function looks a bit different to the one I derived from a cone (https://www.desmos.com/3d/oh3w8e08o9 (last 5 lines)), probably equivalent though.