0.4.3 Alpha (3/15/08) Modified several of the test files in the scenes directory; this is work around for a bug in my video cards drivers; it should make no difference to anyone else Updated GlowSparkParticleVisible to use the new Translucent interface from the net.jinx.video.multipass package; this should now be properly sorting particles 0.4.2 Alpha (11/10/07) Updated GlowSparkParticleVisible to use the new billboarding code in the video package of the modeler Added a new class in the spring package called SpringSheet Made another modification to the collision handling code in PhysicalObject; it's now based on impulse forces 0.4.1 Alpha (3/31/07) Modified the Main class in the util package to load scenes from resources when the -resource switch is supplied; this new switch is not documented via the -help switch, as it isn't meant to be used by the average user 0.4.0 Alpha (3/26/07) I fixed the simultaneous collision bug; or at least it's behaving correctly to a visual inspection; I've got to check my results on paper and in real life before I'll call it perfect; I've got to buy some marbles, ball bearings, or something and roll them around on a pool table a bit; the results are producing a bug: objects can sometimes slide through each other; that was a nasty couple hours of work and made the Contact class a little less beautiful (not that it ever was); even Universe had to be modified to make this work scenes/Bounce2.java is setup to demonstrate the current collision bug, however I find the new collision code far more correct than the old, so I'm keeping it; this new bug comes up much less than the previous one; I've only found one single case where it happens, rather than every time there's a simultaneous collision Added a couple new methods to PhysicalObject: lastFinishedContact() and lastFinishedContactTime(); lastContact() and lastContactTime() can now produce Contact objects that haven't had all their fields filled in; CollisionDetectors will always get complete Contacts, but no where else is this guaranteed I spread the internals of PhysicalObject.addContact(Contact,Universe) out into multiple methods that it calls; the result is easier to read; the new methods mostly all fit on a single screen now Began work on a package for spring forces called net.jinx.physics.spring; the classes in the spring package automatically tag the PhysicalObjects and de-tag them when Springs are destroyed; scenes/Spring.java tests this package New classes in the spring package: SpringManager is the Force instance you add to a Scene or Universe to handle calculating the forces; SpringTag is automatically tagged to any PhysicalObject attached to a spring and then removed when all it's Springs are destroyed; Spring is the base class of all Springs; it has the barest bits to handle a simple spring; DampedSpring extends Spring and adds damping to the forces; GeneralSpring extends DampedSpring and adds a desired distance for the spring to maintain between the two ends; GeneralSpring has all the properties required to function like a real-world spring PhysicalSphere is now using a float for it's radius instead of double, since the graphical class it uses can handle a float radius and doubles aren't used anywhere else in this library; updated my scene files for this Tweaked scenes/BigBang.java and scenes/RandomScene.java a little Added two new methods to PhysicalObject: removeTag(String) and removeTag(Tag); these seemed brain-dead obviously needed to me; surprised I didn't think of them sooner The physics library has now completely exceeded the abilities of my previous, unpublished physics engine; time to celebrate! Now to add rotational bits; ah, the life of a perfectionist... 0.3.4 Alpha (3/10/07) Modified the fountain package to use the new multi-pass rendering abilities of the modeler; GlowSparkParticleVisible is now using the translucent pass to render it's particles Made a slight change to scenes/Space.java; the particles start out black and become more white the longer they last; this gives a more realistic appearance 0.3.3 Alpha (3/3/07) Added a new class to the fountain package: GlowSparkParticleVisible; this should be helpful for mimicking gases, such as smoke, but it should work nicely for other things, too; set the segments higher (12+) if anyone is going to look close and set it to around five if it will be used at a distance; of course, radius matters, too: higher radius will likely need the segments higher Added a new Explosion.java derived scene file to the scenes directory; the file is named Explosion3.java; I think you'll find this one quite pretty scenes/Fountain.java now uses GlowSparkParticleVisible; it's real pretty Fixed the AWT-hang-on-exit bug; see the notes in the Action library changelog for more information 0.3.2 Alpha (2/17/07) Universe now has getParent() and setParent(Universe) methods allowing you to attach an arbitrary Universe to annpther as a parent Fixed a bunch of bugs in Universe that would only ever come up if you started doing strange stuff (trying to remove a PhysicalObject from a Universe that doesn't contain it or adding a PhysicalObject to a Universe that already contains it) Changed ParticleFountain and ParticleFactory a lot; a Subordinate Universe is now beig used and rendering can be done in volume via the new ParticleVisible interface; two ParticleVisible implementations are available: SparkParticleVisible is based on lines and TriangleParticleVisible is based on bill-boarded triangles Subordinate Universes have been tested Updated Scenes\Fountain.java and Scenes\SuperMan.java; the new optimizations in the fountain package have made these run much better Universe now zeros deltaPosition and deltaVelocity of PhysicalObjects when they're added; re-used objects were causing some odd behaviors DecayTag in the fountain package has a new method: getNormalizedAge(); it returns a value from zero to one or higher; zero is not aged, one or higher is aged to decay Made ParticleFountain an OwnerListener so it can properly be informed of the parent universe for it's internal universe New file in the scenes directory called Space.java; it's similiar to a certain classic screen saver New interface in the fountain package called ReleaseControl; it takes care of controlling the number of particles released by ParticleFountain New class in the fountain package called LinearReleaseControl; the older release semantics are encapsulated in this New file in the scenes directory called Explosion.java; I think you'll like this one; this uses a particle fountain to produce a series of explosions of random colors; the colors blend from one to another based on the age of the particle New method in PhysicalObject: velocityAt(float, float); this does a job very similiar to that of the positionAt method New file in the scenes directory called Explosion2.java; this one is the same as Explosion.java, only it uses TriangleParticleVisible instead 0.3.1 Alpha (2/10/07) Fixed Universe to check for collisions with it's parent's objects 0.3.0 Alpha (1/29/07) PhysicalObject.applyForce(Vector,Vector) is back, only named accumulateForce; forces are accumulated in the applyForce(PhysicalObject) method of Force and then are extracted in the getForce(PhysicalObject) method of Universe Added Contact class for tracking collisions; it's mostly complete, but doesn't yet do anything Added a new config file option "physics/timeFactor"; this allows you to twiddle with the simulation speed, in case you just want the results faster, or want to watch in slow-motion Added a new scene file called scenes/RandomScene.java; this one constructs a random scene with gravity and then sets it in motion; this has an interesting effect: the objects will generally spontaneously organize Added a new package called net.jinx.physics.fountain; this contains classes and interfaces for constructing particle fountains Added a new interface called net.jinx.physics.fountain.ParticleFactory; this is plugged into a ParticleFountain to do the work of actually building and/or reconfiguring particles Added a new class called net.jinx.physics.fountain.ParticleFountain; this handles the job of creating and destroying particles Added a new class called net.jinx.physics.fountain.DecayTag; this helps ParticleFountain track the age of it's particles, so they may be destroyed when they've out-lived their usefulness Removed camera definitions from config file (can still be used) and added cameras to the scene description files Added a new class called net.jinx.physics.util.PhysicalSpark; it's drawn with a line from it's position to it's position+deltaposition Added a new scene file called scenes/Fountain.java; this has code for a complete particle fountain; have you ever seen bullets bounce off Superman? this is cooler: sparks sling-shooting through the gravity field of a super-dense sphere with a mass of 2.5x10^13 kilograms I made four of the methods in Universe public, because I realized they were too handy to be private; addObject(PhysicalObject), removeObject(PhysicalObject), addForce(Force), and removeForce(Force); now you can merrily add things directly to Universe if you like; objects that aren't rendered, for example; they don't all have to extend Actor now, but it's still recommended, as it makes scene management easier; I'm planning to use this functionality for rendering particles from particle fountains en-masse through a single glBegin-glEnd pair; this will accelerate rendering of particle fountains like crazy Universe has a new constructor: Universe(Integrator, Universe); this allows a Universe to have a parent Universe whose Forces affect the child's PhysicalObject instances; in the future, this will also allow the child's objects to collide with the parent's objects, but not the reverse; particle systems will likely want all objects to have 100% elasticity for this (special case where particle accepts all energy?) Universe got two new methods; addCollisionDetector(CollisionDetector) and removeCollisionDetector(CollisionDetector) New package: net.jinx.physics.collision; this will hold classes for detecting and handling collisions New class: net.jinx.physics.collision.CollisionTag; this is the abstract base class for all Collision detection related Tag classes New class: net.jinx.physics.collision.SphereCollisionTag; adds a radius to the object and uses it to determine a bounding sphere PhysicalObject got two new methods: lastContact() and lastContactTime(); the first returns the last Contact object in use on the PhysicalObject and the second returns the time value from the last Contact Made various changes to many classes for collision detection and handling; most of these changes were to PhysicalObject and Contact; I hope never to touch that code again, because my brain hurts from thinking too hard PhysicalObject now has a PositionAt(float,float) method that is used by VisiblePhysical; you may find this handy for building Visibles that render PhysicalObjects Several new scene files in the scenes directory; SuperMan.java might be the most interesting to some of you; it's much like Fountain.java, only it uses the new collision system to bounce particles off the red sphere 0.2.0 Alpha (1/20/07) Gigantic overhaul; I figured out how I want most of the code to function, so I rebuilt it; my first stage build will include support for forces acting on objects and I'm planning ahead for adding rotational physics later The simulator is functional; I've tested gravity, RK4Integrator, EulerIntegrator and a host of other things required to get it working You can run the physics.jar file with "java -jar physics.jar source.java"; this runs the simulator application; there's a sample scene file in the scenes directory 0.1.1 Alpha (1/6/07) Physical doesn't extend Actor anymore; I'm going to build Universe as a SceneListener that listens for tagging interfaces on Actors; if they need some other object for the simulation that can't extend actor, then the tagging interface must provide it 0.1.0 Alpha (4/4/06) Initial release; skeleton code and it's now being compiled; I dumped the old code and I'm starting over; first I've got to figure out how I want it to work Added some methods and stuff; still totally untested, but it compiles without error; I'm stuck on the inertia tensor stuff; I may have to buy a book that explains it better