Move around Blob with arrow keys or mouse.
Split blob with h.
Join blobs with j.
Turn gravity on / off with g.
Written by: bjoern.lindberg@gmail.com
Javascript Source Code
Get FireFox
Ray Tracing is fun and easy
Lately, I have been doing other things, such as this:
It's a raytracer I have been working on for a while. Read more.
Linux Version
You can also download the source code for a Linux / SDL / Cairo demo: blobsallad
There is an experimental Open GL version here.
I implemented this to test performance, but it lacks some of the features of the SDL version.
I also removed the horrible linked list implementation in favor for a 'normal' stack-allocated-array class.
Controls are:
g - toggle gravity
h - split blob
j - join blob
e - increase the size of the blobs
r - decrease the size of the blobs
arrow keys - push blobs around
2007-01-26 11:20 I wrote this article for Chris Mills at Opera.
2006-11-14 23:59 Uploaded newer version which contains some crude not too fast collision detection and
some kind of level that the blobs can hang around in. The collision detection is not very fast though.
See bs_octree.c for details. So if someone could implement a faster version I would be most happy.
Further, I decided to start implementing my own 2D drawing algorithms for OpenGL. I know what you
are thinking; "why don't he use this or that library?". I guess I could do that, but on the other
hand I like to try everything for myself. If I just wated a funny game I would buy a PSP :).
Either way, after doing some profiling I noticed that Cairo use rather much time so I though
maybe I could do something myself. (Long live the brave and stupid, which would be me I guess).
Also, there are some additional controls you can play around with if you like; Press e to increase
the size of the blobs, and r to shrink them. Press v to display some profiling information. Don't
be too confused about the percentages don't adding up, some of the tasks include the others. For
example:
--- PROFILER ----------------------------------------------------
All Tasks: 2.87s
1.83s, 63.76%, BS_PROFILER_TASK_DRAW
1.03s, 35.89%, BS_PROFILER_TASK_SIMULATION
0.88s, 30.66%, BS_PROFILER_TASK_OCTREE
0.24s, 8.36%, BS_PROFILER_TASK_OCTREE_TEST_LINE_SEGMENT
-----------------------------------------------------------------
The First and second task are prety much everything that is done. The Octree task is included
in the simulation task. Further the test line segment task is included in the octree task.
All percentages are of the total time, 2.87 seconds in this case.
2006-10-15 23:34 Removed support for X11 and GTK since this is never used and defunct.
2006-10-15 22:51 Code clean up in blob collective
2006-10-14 16:43 Implemented faster collision detection, which reduce collision detection effort
from 16000 computations per blob to just 40. Less is more. The only problem is that this solution
is less visual appealing due to incorrect computation of the blobs radius. So if I can fix that
I suppose it's gonna look alright. Another benefit from this approach is that the blobs doesn't
get stuck inside each other.
2006-10-11 23:16 Implemented first collision detection so that blobs now bounce of each other.
This use up a lot of CPU since two colliding blobs are deformable and penalty forces are applied
iterative. Now this is not so good since I would like to implement some other stuff like a world
in which the blobs can do stupid blobish stuff, and I suppose I could use CPU for that. So high prio
is to speed this up
I have started to harass people I know for game music. If you're interested in creating music
do game design, graphics and stuff like that just send me a mail. If you wanna code you're also
welcome of course.
2006-10-03 20:44 Fixed stability problems, model will no longer behave like a drunk sailor.
2006-10-02 21:56 I made some changes in the blob model. First I got a nicer looking blob.
Also, I gave up using breizeir curves for drawing the blob. Now every blob is 40 line segments.
It have some interesting stability problems. Turn of gravity and see what I mean.
I have also noticed that the cairo library seems to be quiet a bottle neck.
To test this, comment out all meaningful code in bs_blob_collective_draw, then spawn
blobs like crazy and notice that you can create quiet a few before any substantial
frame drop begins.
You need Cairo to compile the source.
Cairo comes with most main distros such as Debian and Ubuntu.
If you have any questions just send me a mail. I am NOT an evil programmer.
Screenshots
Don't tell those guys that did that game ...
Here is how the blob is made. A lot of pointmasses connected
thogether with joints. Each joint allows for some flexibility
which makes the whole thing blobish. A pointmass turns blue to
indicate that the pointmass is inside some other blob. Once the
pointmass is inside the other blob a penalty force is applied
which force the point outside the other blob. I figured another
possibly much faster way to implement collision detection in which
two blobs are separated by a line. Points passing over the other side
of the line are put back again, hence blobs repell each other but
this should be conciderably faster and allows for fast discrimination.