Normal is the vector going out of a plane. Sorry, I'm being a little confusing I think, since I don't have a formal background in Computer Graphics, though we did do Linear Algebra... so I know some terms and others I just 'make up'.
Essentially, what I need is to know the direction the sprite is facing after it is transformed for the camera. So for instance, If sprite is facing east and I'm facing east, I will see (more or less) the back of the sprite if it is in camera (setting aside perspective issues for the moment.)
Just billboarding it is one step; now I need to know what direction it faces so I can render the right texture based on the direction you're looking at it.
- Yes, I'll be using a few quads with different locations and orientations to render a person - this makes multitexture for equipment and items easier to parse.
- I say 'normal' because the normalized vector created by the orientation of the sprite is what I need, as if the sprite were a regular quad instead a billboarded one. Since the sprite will show different textures based on what direction it is viewed, I take the 'normal' (like -1,0,0, or 2*sqr(2),-2*sqr(2),0 ) and clamp it into a six bit bitmap, then that bitmap can be used to get the index of the sprite for the proper direction without any additional math.
- I also figured out I can determine the 'roll' by this normal; for instance, if viewed from the top, the sprite's yaw becomes the roll, and the percentage of each rotation you apply is provided by the normal.
Would be nice if I could to some degree account for perspective too, but maybe that will be later when I integrate this more fully into the shader.
EDIT:
As for the type of game, I'm working on an engine. I want the option to use composite sprites in a variety of camera types; we might want to lock to isometric for battle scenes, but return to first or third person for exploration.
When I worked before I ran into the problem of rendering complex objects - items, furniture, people, animals, monsters - and animating them in 3d being very time consuming. So when I returned to the project, I decided to rebuild the engine from scratch and integrate a model viewer, plus change the way I did the modelling; going for something that didn't require manipulation of 3d models. Sure, I will eventually be able to load them into the engine, but the priority for this operation is to create a unique style and be able to actually have some greater control over its feel. I don't get a lot with 3d models as the level of complexity required to get what I really want is prohibitive. I realized that the most difficult part was to get animated characters and objects in the world that didn't look like crap.
I did build a way to convert a png image, as slices, into a voxel model. The style though, felt very rigid.
This also integrates with an idea I have regarding assets for each character - including later hi-res sprites that have the quality of hi-quality flash (see Lauren Faust's reboot of My Little Pony for an example of how good the animation looks with hi quality sprites) that can be integrated into staged scenes, properly including details that normally would have to be manually included in the graphics.