Farseer Physics Enging News Feed 
Monday, November 19, 2007  |  From Farseer Physics Enging

The folks over at www.infoq.com interviewed me regarding the Farseer Physics Engine. 

 

Read it here:

Wednesday, October 03, 2007  |  From Farseer Physics Enging


FarseerPhysicsNoBorder430X260 

Jump right to the download page

The Details
Enjoy!

Wednesday, October 03, 2007  |  From Farseer Physics Enging

Links

Tuesday, October 02, 2007  |  From Farseer Physics Enging

Links

Monday, October 01, 2007  |  From Farseer Physics Enging

I've decided Thursday will be the day I release the new version of Farseer.

I will not have all the documentation complete, but I will have all the samples done so you can refer to the code for now to see how things should be done.

I'm also going to include a very simple stand-alone Quick Start sample so people can see what it takes to make something happen with Farseer without having the clutter of the samples framework to get in the way.

Till Thursday!

-Jeff

Monday, September 24, 2007  |  From Farseer Physics Enging

The Farseer Physics Engine has a new logo.

I'd like to thank Jeremy Bishop of Zampano Studios for facilitating the creation of this logo and Stefan Warias for creating it.

Here is the logo: (please let me know what you think)

FarseerPhysicsNoBorder430X260

 

The release is still on schedule for the 1st week in October. I'll be spending this week tying up any looses ends and starting the docs. 

-Jeff

Monday, September 17, 2007  |  From Farseer Physics Enging

For those waiting for the new release of the Farseer Physics Engine, you will only need to wait till the 1st week in October.  I have decided that is the week I'll post the new engine to Codeplex.

I said quite a while ago that I would not release the next version of Farseer until I had documentation. Well, I decided not to wait for the docs. I'll have a start on the documentation and will release what I have, but it will not be complete.

I will be releasing a number of samples as part of the samples project that will come with the engine, so people should be able to figure the basics out be looking at those.

Finally, I have a small surprise that might interest some (Thanks Bill). You'll have to wait till the release date to find out what it is.

And for the last time, the task list:

  • Limited Angle Joint (Joint limits for the RevoluteJoint)
  • Pin Joint with softness (60% complete)
  • Slider Joint with softness
  • Max Contacts To Detect, Max Contacts To Resolve, Resolve Deepest First (just some ideas I have about handling contacts)
  • Rewrite/Cleanup Collide method
    • Replace collide event with callback/boolean return value (will allow the application to essentially cancel a collision)
  • Breakable Joints and Springs
  • Queue-up Added and Removed items and remove them when it's safe to do so.
  • Joint API (just some general clean-up of the Joint objects)
  • User Data Object (Tag property)
  • Factory Objects
    • Make static classes
    • Overload as follows (If the simulator is passed in the object will automatically be added to the simulator prior to being returned. Just as a convenience)
      • Method(x, y, z)
      • Method(simulator, x, y, z)
  • General code clean-up
  • Docs! (in progress)
  • New LOGO!  (in progress, thanks Jeremy)
  • Website (bare-bones for now) (on hold till after release)
  • RELEASE!!!!!!!
  • Move on to my ultimate goal: Make some cool physics based games. (can't wait!)

  • Monday, September 10, 2007  |  From Farseer Physics Enging

    A milestone of sorts. All new features for this release are done!

    Here are a few of the things I finished up this week.

    Breakable joints are done!

    I've added a "Tag" property to both the Body and Geometry object. This is similar to ODE's "UserData" object. It's also similar to the Tag object hanging off Forms in .Net. It allows the user to attach any type of object they please. This could be helpful in conjunction with a collision callback. The simplest example I can think of would be to use the Tag object to hold a name/description of some sort.

    All Add/Remove calls now queue up the request and actually do the adding and removal at the beginning of the Update().

    Next in line is the cleanup/refactoring of the factory objects. (for the formal OO coders out there, the factory objects in Farseer are not true Factory patterns, the name just fit)

    Here's the task list for those keeping score.

  • Limited Angle Joint (Joint limits for the RevoluteJoint)
  • Pin Joint with softness (60% complete)
  • Slider Joint with softness
  • Max Contacts To Detect, Max Contacts To Resolve, Resolve Deepest First (just some ideas I have about handling contacts)
  • Rewrite/Cleanup Collide method

    • Replace collide event with callback/boolean return value (will allow the application to essentially cancel a collision)
  • Breakable Joints and Springs
  • Queue-up Added and Removed items and remove them when it's safe to do so.
  • Joint API (just some general clean-up of the Joint objects)
  • User Data Object (Tag property)
  • Factory Objects

    • Make static classes
    • Overload as follows (If the simulator is passed in the object will automatically be added to the simulator prior to being returned. Just as a convenience)

      • Method(x, y, z)
      • Method(simulator, x, y, z)
  • General code clean-up
  • Docs!
  • New LOGO! 
  • Website (bare-bones for now)
  • RELEASE!!!!!!!
  • Move on to my ultimate goal: Make some cool physics based games.

  • Tuesday, September 04, 2007  |  From Farseer Physics Enging

    I made some good progress on breakable joints this week.

    All joints and springs will have a Breakpoint and a JointError (or SpringError) value.  The JointError is a measure of how "broken" a joint is.  The Breakpoint simply indicates the maximum value the JointError can be before it breaks. When the JointError is greater than the Breakpoint, the joint (or spring) is automatically disposed and removed from the simulation.  It's a very simple interface to work with.

    As I add the breakpoint functionality, I'm also doing some api/code cleanup on the classes. Here is a list of all the joints/springs in Farseer. The items with the strikethrough have the breakpoint functionality added and are cleaned and ready for the release. (note: any spring or joint with  "Fixed" in the name just means it is attached to the world rather than another body)

    AngleJoint
    AngleLimitJoint
    AngleSpring
    FixedAngleJoint
    FixedAngleLimitJoint
    FixedAngleSpring
    FixedLinearSpring

    FixedRevoluteJoint
    LinearSpring
    PinJoint
    RevoluteJoint
    SliderJoint

    Finally, here is a video preview of the Farseer Physics Engine samples framework. Enjoy!

    Wednesday, August 29, 2007  |  From Farseer Physics Enging

    Links

    Monday, August 27, 2007  |  From Farseer Physics Enging

    This has been a short work week for me as I was camping thur - sun.  I did, however, manage to knock a few items off my list.

    Here's where I'm at:

  • Limited Angle Joint (Joint limits for the RevoluteJoint)
  • Pin Joint with softness (60% complete)
  • Slider Joint with softness
  • Max Contacts To Detect, Max Contacts To Resolve, Resolve Deepest First (just some ideas I have about handling contacts)
  • Rewrite/Cleanup Collide method
    • Replace collide event with callback/boolean return value (will allow the application to essentially cancel a collision)
  • Factory Objects
    • Make static classes
    • Overload as follows (If the simulator is passed in the object will automatically be added to the simulator prior to being returned. Just as a convenience)
      • Method(x, y, z)
      • Method(simulator, x, y, z)
  • Breakable Joints and Springs
  • Queue-up Added and Removed items and remove them when it's safe to do so.
  • Joint API (just some general clean-up of the Joint objects)
  • User Data Object
  • General code clean-up
  • Docs!
  • New LOGO! 
  • Website (bare-bones for now)
  • RELEASE!!!!!!!
  • Move on to my ultimate goal: Make some cool physics based games.

  • Monday, August 20, 2007  |  From Farseer Physics Enging

    Just another quick weekly progress report. 

    I'm done working on the new Joints (pin and slide). My "softness" implementation is still a bit suspect, but it's going to have to do for now as I don't have the time to dissect all the math. 

    Now I'm moving down the list. Hopefully I can start knocking these items off a bit quicker than I have been.  I'm going camping this week (thur --> sun) though so I probably won't get much done till next week.

    Here is the task list as it stands today:

  • Limited Angle Joint (Joint limits for the RevoluteJoint)
  • Pin Joint with softness (60% complete)
  • Slider Joint with softness
  • Max Contacts To Detect, Max Contacts To Resolve, Resolve Deepest First (just some ideas I have about handling contacts)
  • Rewrite/Cleanup Collide method
    • Replace collide event with callback/boolean return value (will allow the application to essentially cancel a collision)
  • Factory Objects
    • Make static classes
    • Overload as follows (If the simulator is passed in the object will automatically be added to the simulator prior to being returned. Just as a convenience)
      • Method(x, y, z)
      • Method(simulator, x, y, z)
  • Breakable Joints and Springs
  • Queue-up Added and Removed items and remove them when it's safe to do so.
  • Joint API (just some general clean-up of the Joint objects)
  • User Data Object
  • General code clean-up
  • Docs!
  • New LOGO! 
  • Website (bare-bones for now)
  • RELEASE!!!!!!!
  • Move on to my ultimate goal: Make some cool physics based games.

  • Monday, August 13, 2007  |  From Farseer Physics Enging

    Well, instead of working through my list of things to complete and making the list smaller, I actually made the list longer.

    I've decided to add two new Joint types and implement a "softness" factor on all the Joints. The two knew joints are Pin Joint (keeps two anchor points of two different bodies at a constant distance apart) and a Slider Joint (similar to the pin joint, but the anchors are allowed to move as long as they dont' go beyond some max distance)

    I got the idea for the new Joints and some of the code from the Chipmunk Dynamics open source engine.  It's a very cool "C" engine derived, like Farseer, from Erin Cattos Box2D engine.

    Side note, there is a project on CodePlex to port Chipmunk to XNA.  It seems to be just getting started but should be a nice when it's completed.

    So, where am I at with my task list. Well it now looks like this:(strike thru means the item is complete)


    1. Limited Angle Joint (Joint limits for the RevoluteJoint)
    2. Pin Joint with softness (60% complete)
    3. Slider Joint with softness
    4. Max Contacts To Detect, Max Contacts To Resolve, Resolve Deepest First (just some ideas I have about handling contacts)
    5. Rewrite/Cleanup Collide method

      • Replace collide event with callback/boolean return value (will allow the application to essentially cancel a collision)
    6. Factory Objects

      • Make static classes
      • Overload as follows (If the simulator is passed in the object will automatically be added to the simulator prior to being returned. Just as a convenience)

        • Method(x, y, z)
        • Method(simulator, x, y, z)
    7. Breakable Joints and Springs
    8. Queue-up Added and Removed items and remove them when it's safe to do so.
    9. Joint API (just some general clean-up of the Joint objects)
    10. User Data Object
    11. General code clean-up
    12. Docs!
    13. New LOGO! 
    14. Website (bare-bones for now)
    15. RELEASE!!!!!!!
    16. Move on to my ultimate goal: Make some cool physics based games.

    Monday, August 06, 2007  |  From Farseer Physics Enging

    I missed my weekly update last week because I was out of town on a camping trip.

    I'm back now and I've made some progress on the physics engine. I think I can see some light at the end of the tunnel. I'm anxious to get this new release out so I can move on to new things.

    Here is a list of the things I have left to do (this is an informal list taken from my whiteboard):

    1. Limited Angle Joint (Joint limits for the RevoluteJoint)
    2. Max Contacts To Detect, Max Contacts To Resolve, Resolve Deepest First (just some ideas I have about handling contacts)
    3. Rewrite/Cleanup Collide method
      • Replace collide event with callback/boolean return value (will allow the application to essentially cancel a collision)
    4. Factory Objects
      • Make static classes
      • Overload as follows (If the simulator is passed in the object will automatically be added to the simulator prior to being returned. Just as a convenience)
        • Method(x, y, z)
        • Method(simulator, x, y, z)
    5. Breakable Joints and Springs
    6. Queue-up Added and Removed items and remove them when it's safe to do so.
    7. Joint API (just some general clean-up of the Joint objects)
    8. User Data Object
    9. General code clean-up
    10. Docs!
    11. New LOGO! 
    12. Website (bare-bones for now)
    13. RELEASE!!!!!!!
    14. Move on to my ultimate goal: Make some cool physics based games.

    Keep in mind I only have limited time to work on the engine (Mon-Friday: 4:45am to 6:30am) so progress is slow.... but very steady!  If you are wondering why my time is so limited it's because I have a 6 month old son that seems to require my presence most the time I'm awake and not working. :-) 

    Here are a couple screenies of the latest demo added to the Farseer Demo Project. One without the simulator view enabled and one with it enabled.

    CropperCapture[7] CropperCapture[98]

    Monday, July 23, 2007  |  From Farseer Physics Enging

    Things were a bit slow this week.  I got side-tracked doing some more performance tuning. The Joint code was not where it needed to be.

    I've also just found a bug with collision detection. I'll be tracking that down over the next couple days.  Once that is done, I'll be back to creating my Springs demo and then go from there.

    I have decided I'm only doing 2 more demos after the Springs demo.  Joints and something that involves many different things.  If I don't limit myself to 2 more demos, I'll never get this thing released.

    -Jeff Weber

    Monday, July 16, 2007  |  From Farseer Physics Enging

    This week, I finished up the collision categories feature and sample. Here are some screenies of the final demo for this feature.

    CropperCapture[2] CropperCapture[3]

    CropperCapture[6]

    I've just started working on the next feature on my list, controllers.  Controllers in Farseer are simple objects for applying forces to an object or objects.   Springs are an example of a controller.  All controllers inherit from an abstract Controller class.  They then implement the "ApplyForces" abstract method however they see fit. 

    Controllers can be used for springs, explosions, steering behaviors, gravity wells, or anything else you can dream up that involves applying forces over time to a body or bodies.

    The first demo involving controllers will show off the different types of springs:

    • Linear: regular spring between two bodies
    • Angular: attempts to keep a certain angle between two bodies
    • Fixed: used to attach a body to a world position

    I'm still trying to decide what to put in the demo, but here is an early screenshot.

    CropperCapture[4] CropperCapture[5]

    That's it for this week.

    -Jeff Weber

    Monday, July 09, 2007  |  From Farseer Physics Enging

    Nothing really new to post.  I've been working on the new features and samples. Currently I'm working on the new collision categories feature.

    I am borrowing the technique used by the ODE engine... modified slightly to be more .Net friendly.  Each Geometry can be set to be a member of up to 32 arbitrary categories. Each object can then define which categories it can collide with.

    So for example say you defined your categories as such: Cat1 = Red objects, Cat2=Blue objects, Cat3 = Black objects.

    You could then have a red rectangle geometry setup to be a member of Cat1 and able to collide with Cat2 and Cat3 objects.  This would mean the red rectangle would collide with blue and black objects but not other red objects....  This system would also let you set up categories for things like walls that everything could collide with etc..

    It's a pretty flexible system for defining collision behavior amongst geometries.

    I haven't actually implemented it in the engine yet but I do have it scratched out in a small test app and I have a start on the sample that will show how to use it. Here is a screenshot of that:

    CropperCapture[16]

    And here is one from the same demo that shows what things look like with the new PhysicsSimulatorViewer turned on.  I have everything turned on so the framerate kinda drops to a crawl. I wouldn't normally have the collision grid visible as it is the performance hog. The  draw code could stand a little tuning.  Here is the shot:

    CropperCapture[17]

    I'm still trying to get my to-do list off my white-board and into my computer so I can post it and let everyone see where things are at and what is left to do.

    -Jeff Weber

    Sunday, July 01, 2007  |  From Farseer Physics Enging

    Well, it's been a week of trying to eek as much performance out of the 360 as possible. 

    Turns out the compact framework used by the XBox 360 does float math a fair bit slower than .Net on Windows.  The good news is, this forced me to go through Farseer and tune the hell out of the critical performance path.  I've got most of the high impact methods tuned and will finish the rest as I come across them while building samples.

    Why is this good news?  Because the engine really cruises on Windows now and it runs fast enough on the XBox to make some interesting game play.

    The biggest performance bottleneck in the engine is simultaneous contacts.  Anytime a scene contains a lot of stacked bodies, performance (especially on the XBox) will need to be considered.  It is fortunate that there are a LOT of game ideas that don't require a large number of stacked bodies.

    Here are a couple screens to give an idea of the performance difference (for stacked bodies) between the XBox 360 and my PC which is a Core 2 Duo, 2.13 Ghz, and 2 Gig of ram.

    The physics for the scene on the right takes ~5ms to update on my PC, the physics for scene on the left takes ~5ms to update on the XBox.  The XBox cannot run the larger scene.

    Another way to look at it, considering just the scene on the left, the PC can update the physics in less than 1ms while the XBox takes ~5ms.

    CropperCapture[15] CropperCapture[14]

    So, what now... well I'm back to upgrading the engine and creating samples/demos.  I'll try to get a list of the things I'm working on posted so people can track where I'm at and how much I have to go.

     -Jeff

     Farseer Physics Enging News Feed 

    Last edited Dec 7, 2006 at 10:16 PM by codeplexadmin, version 1

    Comments

    No comments yet.