• Create Account

## New Game Prototype - Soft Body Physics

Posted by , 13 August 2014 · 1,269 views

My article on varadic template implementation of signals and slots is now up waiting approval, for those who asked last time so nicely.

Started working in a new game project now. I decided what the world needs is a soft-body swinging physics game, much like my old Squishy project, but rendered in 3D.

I ported ewjordan's excellent Box2D constant area joint over from the Java Box2D library to C++ and it works a treat for simulating a soft body in Box2D. You build a body out of a circle of small circles and it maintains the area in a lovely squishy sort of way. Here I have encased another body inside this ring which is used as the pivot point and to drive the character and works well. In motion in a poor quality video:

Taking a 2D list of points and rendering it as a 3D blob was an interesting problem that I've invented a completely new (to me) solution to that I thought I'd run through quickly.

To begin with, I create a list of the line segments connecting the outer bodies, including the normals:

I then find the min and max x co-ordinates, and a y co-ordinate somewhere below the blob, then use a segment intersection test to step across the shape, casting a ray up across the shape looking for intersections, first with it set to find a segment with a normal opposite to the ray direction, then one with a normal in the same direction. Thus we end up tracing out the shape as a series of vertical segments:

From here, we now have a top and bottom co-ordinate so we find the centre point of each and use those to define a circle of vertices that moves around the centre along the Z axis with its size based on the size of the segment. It is then just a case of stitching these vertices together into faces, and getting the vertex normals by working out the direction of the vertex from the centre (average) position of the shape.

Means creating the mesh on the fly every frame, but seems to be fast enough. Seems to produce a nice effect. Just need to start pondering how to render the squishy arms that you fire out to swing around the world next.

Looks great, I look forward to more updates!

The approach you took is very interesting in that it seems easy to replicate.

I've actually dumped what I outlined here and trying a different way to extrude the blob. I'll write it up when it's finished.

Okay, I would be interested in the differences between the two methods.

There are no Trackbacks for this entry

S M T W T F S
123
45678910
11 121314151617
18192021222324
25262728293031