'=========================================================================== ' Subject: 3D ROTATING CUBE Date: Unknown Date ' Author: Joshua Dickerson Code: QB, QBasic, PDS ' Origin: FidoNet QUIK_BAS Echo Packet: GRAPHICS.ABC '=========================================================================== 'By Joshua Dickerson ' DECLARE SUB InitProgram () DECLARE SUB MainLoop () DECLARE SUB Calc3D () DECLARE SUB Rotation () DECLARE SUB DrawObject () ' DIM SHARED Lines, World(500, 3) DIM SHARED X, Y, Z, sX, sY, Xa, Ya, Za, sXs, sYs, D DIM SHARED R1, R2, R3, Sr1, Sr2, Sr3, Cr1, Cr2, Cr3, mX, mY, mZ, Eye ' READ Lines FOR I = 1 TO Lines FOR J = 1 TO 3 READ World(I, J) NEXT NEXT ' InitProgram MainLoop SCREEN 0 END ' 'CUBE LOOKING THINGY DATA 24 DATA -90,-90,-90, -90,-90,90, -90,-90,90, 90,-90,90 DATA 90,-90,90, 90,-90,-90, 90,-90,-90, -90,-90,-90 DATA -90,90,-90, -90,90,90, -90,90,90, 90,90,90 DATA 90,90,90, 90,90,-90, 90,90,-90, -90,90,-90 DATA -90,90,-90, -90,-90,-90, -90,-90,90, -90,90,90 DATA 90,90,90, 90,-90,90, 90,-90,-90, 90,90,-90 ' 'DIAMOND LOOKING THINGY 'DATA 26 'DATA -90,0,-90, -90,0,90, -90,0,90, 90,0,90 'DATA 90,0,90, 90,0,-90, 90,0,-90, -90,0,-90 'DATA -90,0,-90, 0,90,0, -90,0,90, 0,90,0 'DATA 90,0,90, 0,90,0, 90,0,-90, 0,90,0 'DATA -90,0,-90, 0,-25,0, -90,0,90, 0,-25,0 'DATA 90,0,90, 0,-25,0, 90,0,-90, 0,-25,0 'DATA 0,-25,0, 0,90,0 ' 'EMPEROR ANDROSS (STAR FOX) DATA 142 ' 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄNOSEÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ DATA 5,-4,10, -5,-4,10, -5,-4,10, -5,-25,10 DATA -5,-25,10, 0,-52,0, 0,-52,0, 5,-25,10 DATA 5,-25,10, 5,-4,10, 5,-25,10, 10,-18,2 DATA 10,-18,2, 10,2,2, 10,2,2, 5,-4,10 DATA 10,2,2, -10,2,2, -10,2,2, -5,-4,10 DATA -10,2,2, -10,-18,2, -10,-18,2, -5,-25,10 ' 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄMOUTHÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ DATA -10,2,2, -28,26,0, -10,2,2, 0,14,5 DATA 0,14,5, 10,2,2, 28,26,0, 10,2,2 DATA -28,26,0, 0,14,5, 0,14,5, 28,26,0 DATA -28,26,0, 0,18,6, 0,18,6, 28,26,0 DATA -28,26,0, 0,31,6, 0,31,6, 28,26,0 DATA 0,14,5, 0,18,6, -28,26,0, 0,36,5 DATA 0,36,5, 28,26,0, 0,31,6, 0,36,5 DATA -8,47,0, 0,36,5, 0,36,5, 8,47,0 ' 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄOUTLINE OF FACEÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ DATA 0,-52,0, -26,-47,0, -26,-47,0, -37,-32,0 DATA -37,-32,0, -37,-6,0, -37,-6,0, -28,26,0 DATA -28,26,0, -8,47,0, -8,47,0, 8,47, 0 DATA 8,47,0, 28,26,0, 28,26,0, 37,-6,0 DATA 37,-6,0, 37,-32,0, 37,-32,0, 26,-47,0 DATA 26,-47,0, 0,-52,0 ' 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄFOREHEADÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ DATA 0,-52,0, -23,-33,10, -23,-33,10, -5,-25,10 DATA -26,-47,0, -23,-33,10, -37,-32,0, -23,-33,10 DATA -37,-18,0, -23,-33,10, -10,-18,2, -23,-33,10 DATA 0,-52,0, 23,-33,10, 23,-33,10, 5,-25,10 DATA 26,-47,0, 23,-33,10, 37,-32,0, 23,-33,10 DATA 37,-18,0, 23,-33,10, 23,-33,10, 10,-18,2 ' 'ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄEYES + CHEEKSÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ DATA -37,-18,0, -23,-26,12, -23,-26,12, -10,-18,2 DATA -37,-18,0, -23,-13,10, -23,-13,10, -10,-18,2 DATA -37,-18,0, -23,-17,12, -23,-17,12, -10,-18,2 DATA -23,-33,10, -23,-26,12, -23,-17,12, -23,-13,10 DATA -10,2,2, -23,-13,10, -23,-13,10, -37,-6,0 DATA 37,-18,0, 23,-26,12, 23,-26,12, 10,-18,2 DATA 37,-18,0, 23,-13,10, 23,-13,10, 10,-18,2 DATA 37,-18,0, 23,-17,12, 23,-17,12, 10,-18,2 DATA 23,-33,10, 23,-26,12, 23,-17,12, 23,-13,10 DATA 10,2,2, 23,-13,10, 23,-13,10, 37,-6,0 ' SUB Calc3D ' X = -1 * X: Xa = Cr1 * X - Sr1 * Z: Za = Sr1 * X + Cr1 * Z X = Cr2 * Xa + Sr2 * Y: Ya = Cr2 * Y - Sr2 * Xa: Z = Cr3 * Za - Sr3 * Ya Y = Sr3 * Za + Cr3 * Ya: X = X + mX: Y = Y + mY: Z = Z + mZ: sX = D * X / Z sY = D * Y / Z ' END SUB ' SUB DrawObject ' Rotation FOR I = 1 TO Lines STEP 2 X = World(I, 1) Y = World(I, 2) Z = World(I, 3) Calc3D sXs = sX: sYs = sY ' X = World(I + 1, 1) Y = World(I + 1, 2) Z = World(I + 1, 3) Calc3D ' LINE (sXs, sYs)-(sX, sY), Eye NEXT ' END SUB ' SUB InitProgram ' SCREEN 9, 1, 0, 1 WINDOW (-200, -150)-(200, 150) VIEW (8, 9)-(632, 341), 0, 15 CLS 'PAGE 0 ' SCREEN 9, 1, 1, 0 WINDOW (-200, -150)-(200, 150) VIEW (8, 9)-(632, 341), 0, 15 CLS 'PAGE 1 ' D = 1200 'View point and rotation values mZ = -1500 mX = -5 R1 = 0 R2 = 0 R3 = .3 ' END SUB ' SUB MainLoop ' WHILE INKEY$ = "" 'R1 = R1 + RND(1) * .05: IF R1 > 6.28 THEN R1 = 0 'R2 = R2 + RND(1) * .05: IF R2 > 6.28 THEN R2 = 0 'R3 = R3 + RND(1) * .05: IF R3 > 6.28 THEN R3 = 0 R1 = R1 + .1: IF R1 > 6.28 THEN R1 = 0 ' CLS : Eye = 7: DrawObject Page = ABS(Page = 0) 'Page switching is used to hide the drawing SCREEN 9, 1, 1 - Page, Page 'process so the image looks smooth. WEND ' END SUB ' SUB Rotation ' Sr1 = SIN(R1): Sr2 = SIN(R2): Sr3 = SIN(R3) Cr1 = COS(R1): Cr2 = COS(R2): Cr3 = COS(R3) ' END SUB