[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]
{
> This doesn't have anything to do with the flicker problem, but I was
> wondering if you could tell me how to scale and rotate .COD images.
Although I posted some code to flip COD's horizontally & vertically
some time ago, I won't make it a regular feature of AniVGA, as I'm
working on compiled bitmaps and thus, altering the "data" after having
it compiled into a procedure is close to impossible...
However, if you are speaking about scaling & rotation in MAKES: yes,
one could include it. To be honest, I was just to lazy to code all
that matrix crap necessary.
For the interested reader: to scale the points (x,y) of a matrix by
some factor f, you just have to apply the matrix
(f 0)
(0 f)
to all its points.
A rotation by an angle of z degrees counterclockwise about the
rotation center (u,v) is more complex: one first has to transform the
point coordinates to homogeneous coordinates (that is: append a one as
the 3rd component: (x,y) -> (x,y,1); if during computations this 3rd
component "c" of a vector (a,b,c) becomes <>1, then renormalize the
vector to (a/c,b/c,1)).
Having done so, the rotation consists of three steps:
a) make (u,v) the new origin of your pixels (instead of (0,0))
b) rotate the data by z degrees about the new origin (0,0)
c) retransform the true (0,0) origin
Step a) consists of applying the following matrix M1 to the pixels
(x,y,1):
( 1 0 0)
( 0 1 0)
(-u -v 1)
Likewise, step b) is done by the matrix M2:
( cos(z) sin(z) 0 )
(-sin(z) cos(z) 0 )
( 0 0 1 )
And step c) is done by M3:
( 1 0 0)
( 0 1 0)
(+u +v 1)
These three steps can be squeezed into one matrix application by
combining the three matrices into one matrix M=M1*M2*M3 (with "*" =
matrix multiplication operator from linear algebra).
[Back to GRAPHICS SWAG index] [Back to Main SWAG index] [Original]