I've looked at several billboarding source code snippets in books and the SDK and all of them use the view matrix or D3DXMatrixRotationY(). Either way they are still multiplying.
My final project will have the matrix billboard stored in the camera class. The Billboard class will then simply retrieve the billboard matrix, alter members ._41,._42, and ._43 for translation of the billboard, sort the billboards from back to front, cull the unneeded billboards, and draw all billboards in the scene with their current texture.
Keep in mind the math will only be done once per frame, not once per billboard.
This can be done also with animated billboards. Animation comes from an animation controller class that simply tracks a timer (another class) and when the current timer is up for the frame, it switches texture pointers to the next one in the list. The actual billboard or sprite does not carry the animation data, the class carries a pointer to the animation controller class. In this way all animations are separate from the sprites. So all that needs to be done is to render the sprite, billboard, or what have you with the correct texture and the correct time based on frame_time.
Suspicious at best. I suppose you could scale your model vertices every frame to get the desired size or you could create the model with the desired size. Either way you still cannot render the final model w/o doing something to it. I do not store the model's as unit vectors so that I do not have to scale them every time I want to use them. My coordinate system is rotated by matrices in the camera class and quite frankly I have no idea how you would call this a speed boost since this is what has to be done to get the desired results.
Also, this is how most graphics apis actually rotate the scene...they simply rotate the coordinate system by using a matrix, but then the verticies are just specified in terms of the unit vectors...big speed boost.
I know how D3D rotates the scene and yes it is by using matrices, which from my source code you can see I'm using matrices too. Where do you think the view matrix came from?
All that has to be done in each of my classes is this:
1. Rotate the object in model space.
2. Translate the object in world space
3. Rotate the object in world space, if need be.
I wish I could get rid of the Transform portion because switching transforms in D3D is costly, but the only other way would be to take the view matrix and step down one level to the world matrix, alter the correct members and multiply with model's rotate matrix and then render.
void Object::Render(float frame_time)
//World rotation if needed?
This can be accompished with a matrix stack but I haven't implemented it yet.