DirectX9 HUD, Menu & World-Based GUI Display
===

I have searched through the current questions but I haven't found the specific answers I am after.

Basically I am looking to start making a menu system and HUD system for my game and I am wondering how to best do this suing DirectX9 & C++.

The three methods I have considered are:

1. General sprites using LPD3DXSPRITE. This is probably the easiest method but from what I have heard it is the least flexible (and outdated?)

2. Using screen-aligned quads and textures. This seems more flexible and I assume is faster for the hardware but I am unsure of how to implement this for certain GUI elements. For instance, how would I translate 3D coordinates to 2D screen-space for UI elements such as health bars that follow characters or menus that are based on the selected character's position?

3. Similar to 2. Creating a Plane Mesh for 2D elements in a billboard style and aligning the plane in 3D space to match the camera view. I imagine this method would make scaling and rotation easier but positioning a nightmare.

I would assume #2 is the best solution, in which case I would really appreciate some clarification on the issues listed there. Also, I would like to add some shader effects to the HUD elements but I have never tried applying shaders to anything that wasn't a clearly defined mesh. Is that a possibility?

