Simple animation
Apr 25, 2012 3:35:00 GMT 1
Post by Deleted on Apr 25, 2012 3:35:00 GMT 1
Here is a simple 3D animation. It's possible to start and stop rotation and change its speed using "+/-" buttons. Just a simple example of using canvas. Source is attached.
INCLUDE "/usr/lib/bacon/hug.bac"
HUGOPTIONS ("CANVAS GL")
HUGOPTIONS ("GL_FREEZE 1")
GLOBAL X, Y, Z, STAN, POZX, POZY, PREDKOSC
GLOBAL A, B, X2, Y2, Y3, SX, SY, Z2 TYPE FLOATING
STAN = 0
POZX = 0
POZY = 0
PREDKOSC = 4
FUNCTION ANIMACJA
SQUARE ("#000000", 0, 0, 640, 480, TRUE)
A = POZX / 99.0
B = POZY / 99.0
FOR X = - 2 TO 2
FOR Y = - 2 TO 2
FOR Z = -2 TO 2
Y2 = Y
X2 = X * COS (A) - Y2 * SIN (A)
Y3 = X * SIN (A) + Y2 * COS (A)
Y2 = Y3
Y3 = Y2 * COS (B) - Z * SIN (B)
Z2 = Y2 * SIN (B) + Z * COS (B)
SX = 320.0 + X2 * (Z2 + 2.0) * 15.0;
SY = 240.0 + Y3 * (Z2 + 2.0) * 15.0;
SQUARE ("#FFFF00", SX, SY, (Z2 + 2.0) * 3.0, (Z2 + 2.0) * 3.0, TRUE)
NEXT Z
NEXT Y
NEXT X
SYNC ()
INCR POZX
INCR POZY
IF STAN = 1 THEN
TIMEOUT (PREDKOSC, ANIMACJA)
END IF
RETURN (FALSE)
END FUNCTION
SUB AKTYWUJ
STAN = 1
TIMEOUT (50, ANIMACJA)
END SUB
SUB PAUZA
STAN = 0
END SUB
SUB ZWIEKSZ
IF PREDKOSC > 1 THEN
PREDKOSC = PREDKOSC / 2
END IF
END SUB
SUB ZMNIEJSZ
IF PREDKOSC < 10 THEN
PREDKOSC = PREDKOSC * 2
END IF
END SUB
WIN = WINDOW ("Animation", 660, 560)
RYSUNEK = CANVAS (640, 480)
RUSZAJ = BUTTON ("Start", 100, 30)
ZATRZYMAJ = BUTTON ("Stop", 100, 30)
SZYBCIEJ = BUTTON ("+", 30, 30)
WOLNIEJ = BUTTON ("-", 30, 30)
CALLBACK (RUSZAJ, AKTYWUJ)
CALLBACK (ZATRZYMAJ, PAUZA)
CALLBACK (SZYBCIEJ, ZWIEKSZ)
CALLBACK (WOLNIEJ, ZMNIEJSZ)
ATTACH (WIN, RYSUNEK, 10, 10)
ATTACH (WIN, RUSZAJ, 10, 520)
ATTACH (WIN, ZATRZYMAJ, 550, 520)
ATTACH (WIN, SZYBCIEJ, 290, 520)
ATTACH (WIN, WOLNIEJ, 330, 520)
TIMEOUT (50, ANIMACJA)
DISPLAY