I agree that manually writing values into 4*4 matrixes would be
awkward. But that isn't required.
We were talking about the representation of the attribute (or
attributes) of position, orientation and scale of a 3D object and I was
suggesting that this should be represented by a single 4*4 matrix value.
The values you identify above are parameters to operations and not
attributes of the 3D object. In tsipp, translation and scale values can
still be represented as simple vectors, and rotations as single
values.
I'm mostly interested in the mathematical principles here but
I will use the tSipp language for this example. Tsipp provides the
following operators (from the man pages):
SippObjectTransform <object> <matrix>
Post multiply specified matrix into the transformation
matrix of <object>.
SippObjectRotateX <object> <angle>
SippObjectRotateY <object> <angle>
SippObjectRotateZ <object> <angle>
Rotate the <object> <angle> radians or degrees about the X (Y, Z)
axis. The angle is radians if no prefix or if the number is
prefixed with an "R" and is degrees, prefixed with a "D".
SippObjectRotate <object> <point> <vector> <angle>
Rotate the <object> <angle> radians or degrees about the line
given by <point> and <vector> starting in that point.
The angle is radians if no prefix or if the number is
prefixed with an "R" and is degrees, prefixed with a "D".
SippObjectScale <object> <factor> | {<xfactor> <yfactor> <zfactor>}
Scale the specified object with the scaling factors
<xfactor>, <yfactor> and <zfactor> in the main directions
respectively. If only <factor> is specified, it is used
as thescaling factors in all directions.
SippObjectMove <object> {<xdist> <ydist> <zdist>}
Move (translate) the specified <xdist>, <ydist> and
<zdist> in the three main directions, respectively.
So your example could be coded:
SippObjectMove $myobject {2.5 2.5 0.0}
SippObjectRotateX $myobject D45
SippObjectScale $myobject {2 .5 1.1}
i.e. more or less as easily as in your original statement.
Often this kind of operation can be precomputed into a single
transformation matrix, e.g.
set transform [SippMatScale \
[SippMatRotateX \
[SippMatTranslate [SippMatIdent] {2.5 2.5 0.0} ] \
D45 ] \
{2 .5 1.1} ]
SippObjectTransform $myobject $transform
It is probably much more efficient to transmit transformations this way.
John Ellson
AT&T Bell Labs