XNA 2D Sprite Sway/Wind for Foliage, Trees, ect...

Started by
2 comments, last by LiberLogic969 9 years, 12 months ago

I'm trying to find a method for simulating the effects of wind on various sprites in a 2D scene. Is there a relatively simple technique that I could use to achieve this?

What I have in mind is to give these sprites a "spring" effect that I could hand a force to which would rotate them in a specific direction and eventually degrade the force and bring the sprite back to its "resting" rotation over time with a little bit of rebound/wobble/sway... My Problem is I don't understand how I can mathematically create the elastic/spring effect using rotation and bringing into account things like mass, resistance, or stiffness. How would I go about doing this in code?

This doesn't have to be super realistic in anyway, but I was hoping I could set it up so there is a global wind variable that gets applied to sprites starting at one side of the screen and making its way to the other to look like a gust of wind passed through, which I should be able to accomplish once I have a method for applying a wind force to each sprite...

If anyone has any experience doing something like this or any advice/ideas that you think may be helpful I would greatly appreciate it!!!

Advertisement

This might be a useful resource http://http.developer.nvidia.com/GPUGems/gpugems_ch07.html


My Problem is I don't understand how I can mathematically create the elastic/spring effect using rotation and bringing into account things like mass, resistance, or stiffness. How would I go about doing this in code?

For an appropriate equation, you might google things like "damped oscillator equation". http://mathworld.wolfram.com/UnderdampedSimpleHarmonicMotion.html

Basically, a sine/cosine wave multiplied by an exponential decay function.

Or you could just use a sine wave and modify it by the current strength of the "wind gust" in that location.

Your wind gust could be a modifier on your global wind speed, and could be modeled by a point that moves across the screen, and the wind strength being some function of distance from that point at a particular location.

How are you drawing your trees? How are your sprites broken up?

I have a blog post based on the crysis method for rendering wind animations in vegetation (in 3d), it may be of some use:

http://mtnphil.wordpress.com/2011/10/18/wind-animations-for-vegetation/


My Problem is I don't understand how I can mathematically create the elastic/spring effect using rotation and bringing into account things like mass, resistance, or stiffness. How would I go about doing this in code?

For an appropriate equation, you might google things like "damped oscillator equation". http://mathworld.wolfram.com/UnderdampedSimpleHarmonicMotion.html

Basically, a sine/cosine wave multiplied by an exponential decay function.

Or you could just use a sine wave and modify it by the current strength of the "wind gust" in that location.

Your wind gust could be a modifier on your global wind speed, and could be modeled by a point that moves across the screen, and the wind strength being some function of distance from that point at a particular location.

How are you drawing your trees? How are your sprites broken up?

I have a blog post based on the crysis method for rendering wind animations in vegetation (in 3d), it may be of some use:

http://mtnphil.wordpress.com/2011/10/18/wind-animations-for-vegetation/

Thanks for the replies. That math is way over my head >_<

For trees my current plans are to create a few different trunk pieces that I can group together and them place the leaves above them in my map editor. Same thing for vegetation, I will be placing groups of sprites in various layers of the map and flagging them as "effected by wind".

I don't have any experience with shaders unfortunately so I wouldn't know where to begin with advanced concepts like that.

This topic is closed to new replies.

Advertisement