I found this experiment quite interesting. In an earlier post I gave an example of a 2-dimension fluid simulation that I'd been working on using the Navier-Stokes equations. I decided to play around with this code a bit and use the 3D point engine from my last experiment in conjunction with the fluid engine. The density from the fluid simulation is simply projected onto the XZ plane with density values corresponding to the height of corresponding point particles.
The results are certainly interesting. Click the image below to start up the experiment. To create waves just move your mouse around and drag the movie to change the camera angle. I decided to add a slight fade and blur on the particles which makes it look very pretty. Enjoy!
Hi
ReplyDeleteI couldn't find your email address anywhere on your page so Im just going to write here:
This is a very niche wave simulation, would it be possible to take a look at the source ? Also your particle 3D grapher (3D particle systems in AS3) - would be interesting to see. If by any chance that is possible you are more than welcome to send me a link or some files at samialbeik at gmail.com
Hi Sami, you've just alerted me to the lack of contact details on this site!
ReplyDeleteGlad you like the simulation! A great place to look is here http://code.google.com/p/in-spirit/wiki/FluidSolver
which has complete source to a fluid solver by Eugene Zatepyakin. I'll try to dig up some source code for the 3D stuff, I'm currently very busy at university, sorry for the late reply!
Cheers
Sam
Oh and this code should get you started on 3D stuff, it loads any .obj file (a wavefront 3d object, you should be able to download some for free online) and renders all the vertices which then move around the screen in 3D, its not in OOP unfortunately, but will paste nicely into your timeline and give you a good idea of what its doing:
ReplyDelete//focal length
var f:int = 400;
//rotation
var u:Number = 0;
var r:Number = 0;
var d:int = 2500;
//camera
var cX:int = 0;
var cY:int = 0;
var cZ:int = 0;
//position
var tX:int;
var tY:int;
var tZ:int;
//scale
var s:Number;
//Vector co-ordinates
var X:Vector. = new Vector.();
var Y:Vector. = new Vector.();
var Z:Vector. = new Vector.();
var NUM_P:int = 0;
//counters
var i:int;
var j:int;
var k:int;
//------------------------------------
//Populate 3D Data
//------------------------------------
//Load OBJ File
include "OBJ.as"
//save data into arrays...
var A:Array = new Array();
A = OBJ.split(",");
var l:int = A.length-1;
for(i=l;i>=0;--i)
{
if(A[i].indexOf("v ")==-1)
{
A.splice(i,1);
}
}
l = A.length;
var LL:int = Math.ceil(l/10000);
if(A[0].split(" ").length==4)
{
for(i=0;i2*Math.PI) r-=2*Math.PI;
if(r<0) r+=2*Math.PI;
for(i=0;i0];
}