• entries
    743
  • comments
    1924
  • views
    577732

New Game Prototype - Soft Body Physics

Sign in to follow this  
Followers 0
Aardvajk

1444 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.

screen.jpg

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:

normals.jpg

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:

segments.jpg

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.

3
Sign in to follow this  
Followers 0


4 Comments


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

1

Share this comment


Link to comment
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.
1

Share this comment


Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now