@JSoftware: Are you serious? :? I've been working with D3D matrices for some time and as far as i know it's as follows:

If you don't transpose any matrices, it would be like this:

Mat._41 = Translate_X;
Mat._42 = Translate_Y;
Mat._43 = Translate_Z;

The upper-left 3x3 matrix (from _11 to _33) is for both rotation and scaling, so:

Mat._11 = Scale_X;
Mat._22 = Scale_Y;
Mat._33 = Scale_Z;

You shouldn't touch the (_14,_24,_34,_44) vector because that is used to transform the W component for each vertex. These value's should be 0,0,0,1 like the identity matrix. W is for perspective correction and should be 1.0.

A dumb suggestion of mine is to multiply the existing scaling value's with a scaling factor. Like:

[pascal]
d3dTransposedMat._11 := d3dTransposedMat._11 * scale.x();
d3dTransposedMat._22 := d3dTransposedMat._22 * scale.y();
d3dTransposedMat._33 := d3dTransposedMat._33 * scale.z();
[/pascal]

Or try multiplying with a scale matrix. This way you preserve the existing rotation, while effectivly scaling your billboard.

It might work, but i could be wrong. I'm not a math-monster. :razz: