home *** CD-ROM | disk | FTP | other *** search
- (NOTE: this file contains extended ASCII and may not appear
- correctly if your font does not support extended ASCII
- characters. This file will appear correctly in the
- MS-DOS Editor.)
-
- This effect uses palette animation.
-
- Here is how it works:
-
- Imagine a 4x4 display using 4 colors. We could set the colors
- up to look something like this:
-
- 1 2 3 4
- 1 2 3 4
- 1 2 3 4
- 1 2 3 4
-
- Now we can cycle all of the colors in each row to the right. (The
- one on the right will wrap-around to the left.)
-
- 4 1 2 3
- 4 1 2 3
- 4 1 2 3
- 4 1 2 3
-
- If we continue this cycling we would get animated lines moving
- to the right. The same can be done to animate the lines going
- down. i.e.
-
- 1 1 1 1 4 4 4 4
- 2 2 2 2 -> 1 1 1 1
- 3 3 3 3 -> 2 2 2 2
- 4 4 4 4 3 3 3 3
-
- Now if we expand our palette to 16 color we can combine moving
- down and right at the same time.
-
- Move right:
-
- 1 2 3 4 4 1 2 3
- 5 6 7 8 -> 8 5 6 7
- 9 10 11 12 -> 12 9 10 11
- 13 14 15 16 16 13 14 15
-
- Move down:
-
- 1 2 3 4 13 14 15 16
- 5 6 7 8 -> 1 2 3 4
- 9 10 11 12 -> 5 6 7 8
- 13 14 15 16 9 10 11 12
-
- Move right and down:
-
- 1 2 3 4 4 1 2 3 16 13 14 15
- 5 6 7 8 -> 8 5 6 7 -> 4 1 2 3
- 9 10 11 12 -> 12 9 10 11 -> 8 5 6 7
- 13 14 15 16 16 13 14 15 12 9 10 11
-
- Now if you tile these 4x4 blocks end to end and cycle the colors
- as above, you get a moving checkerboard.
-
-
- ▓▒░ ▓▒░ ▓▒░ ▓▒░ ░ ▓▒░ ▓▒░ ▓▒░ ▓▒ ▓▒░ ▓▒░ ▓▒░ ▓▒░
- ▒░ ▓▒░ ▓▒░ ▓▒░ ▓ ▓▒░ ▓▒░ ▓▒░ ▓▒░ ▒░ ▓▒░ ▓▒░ ▓▒░ ▓
- ░ ▓▒░ ▓▒░ ▓▒░ ▓▒ ▓▒░ ▓▒░ ▓▒░ ▓▒░ ░ ▓▒░ ▓▒░ ▓▒░ ▓▒
- ▓▒░ ▓▒░ ▓▒░ ▓▒░ -> ▒░ ▓▒░ ▓▒░ ▓▒░ ▓ -> ▓▒░ ▓▒░ ▓▒░ ▓▒░
- ▓▒░ ▓▒░ ▓▒░ ▓▒░ -> ░ ▓▒░ ▓▒░ ▓▒░ ▓▒ -> ▓▒░ ▓▒░ ▓▒░ ▓▒░
- ▒░ ▓▒░ ▓▒░ ▓▒░ ▓ ▓▒░ ▓▒░ ▓▒░ ▓▒░ ▒░ ▓▒░ ▓▒░ ▓▒░ ▓
- ░ ▓▒░ ▓▒░ ▓▒░ ▓▒ ▓▒░ ▓▒░ ▓▒░ ▓▒░ ░ ▓▒░ ▓▒░ ▓▒░ ▓▒
- ▓▒░ ▓▒░ ▓▒░ ▓▒░ ▒░ ▓▒░ ▓▒░ ▓▒░ ▓ ▓▒░ ▓▒░ ▓▒░ ▓▒░
-
-
- Wormhole does the same thing, except it uses 15x15 blocks (225
- colors) and instead of tiling the blocks end to end on a flat
- plane, it tiles them in 3D converging at the center of the
- wormhole.
-
- The following code will generate the 3D wormhole using the
- aforementioned 15x15 grids.
-
- //Do all the work!
- //convert r,theta,z to x,y,x to screen x,y
- //plot the point
- //z=-1.0+(log(2.0*j/DIVS) is the line that sets the math eqn for plot
- //Feel free to try other functions!
- //Cylindrical coordinates, i.e. z=f(r,theta)
-
- #define STRETCH 25
- #define PI 3.14159265358979323846
- #define XCENTER 160
- #define YCENTER 50
- #define DIVS 1200
- #define SPOKES 2400
-
- void transarray(void)
- {
- float x,y,z;
- int i,j,color;
- for(j=1;j<DIVS+1;j++)
- for(i=0;i<SPOKES;i++)
- {
- z=-1.0+(log(2.0*j/DIVS));
- x=(320.0*j/DIVS*cos(2*PI*i/SPOKES));
- y=(240.0*j/DIVS*sin(2*PI*i/SPOKES));
- y=y-STRETCH*z;
- x+=XCENTER;
- y+=YCENTER;
- color=((i/8)%15)+15*((j/6)%15)+1;
- if ((x>=0)&&(x<=320)&&(y>=0)&&(y<=200))
- plot((int) x,(int) y,color);
- }
- }
-
- After loading the bitmap to a direct draw surface, all that is
- left to do is rotate the colors and you have a wormhole!
-
-