PDA

View Full Version : MetaCircles - simple entity demo



Petr Schreiber
13-07-2011, 18:23
Hi,

as the Portal 2 game I played recently modelled liquids via isosurfaces, I could not wait to try to develop similar system.
For the start I picked 2D case of primitives I call MetaCircles. On the internet you can find them referenced as MetaBalls, but as it is simple 2D shape, the Circle suits better I think.

Very interesting article and source of inspiration and code can be read here:
http://www.gamedev.net/page/resources/_//feature/fprogramming/exploring-metaballs-and-isosurfaces-in-2d-r2556

Below I attach sample code for 2D case. The download contains 3 files:

MetaCircle_Demo.tBasic - the main application
actor_MetaCircle.tBasicU - custom entity representing single meta circle, which can be instanced in any number of copies
animator_MetaCircleCollection.tBasicU - custom entity serving as high level container for meta circles, taking care of calculating the whole effect

ThinBASIC 1.8.8.0 is required.

I hope you will like it. It is quite computionally expensive, and many further optimizations could be done (feel free to try), but I wanted to keep the code easy to navigate.
If it runs too slow on your machine, please tune parameter at line 41 in main code:


MetaCircleCollection_SetGridStep(%sScene, %eMetaCircleCollection, 0.15)

... to any bigger number, such as 0.2 and so on :)

I hope you will like it, it is quite hypnotic to watch.


Petr

zak
13-07-2011, 21:50
thanks Petr for the valuable subject and for the code, the referenced articles contains deep philosophical discussion how data can be represented, it is seems the metaballs is an old subject. needs more time to read. also the referenced Paul's projects site is very usefull. your code as always proves that thinbasic is a capable language, and can be used for any thing imaginable.

kryton9
13-07-2011, 22:57
Really cool demo Petr!! It is fun to watch that is for sure.

ErosOlmi
18-07-2011, 08:17
Great example Petr.
I'm using it to optimize Core engine in some parts this script is able to push at the maximum.

Petr Schreiber
18-07-2011, 09:34
Thanks guys!,

it is really surprising challenge from performance point of view.

Regarding speed - before posting it here I had to do one minor optimization, which was replace function call on line 99 in animator_MetaCircleCollection.tBasicU with "expanded" function body. It brought significant speed increase, I guess the memory allocations during function invoke were the possible bottleneck, as the rest is the same.


Petr

matthew
25-07-2011, 00:15
I was expecting it to run quite slow on my netbook but was quite surprised when I saw it running. :)