home *** CD-ROM | disk | FTP | other *** search
- {
- > 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).
-