Hal Teach me to code - Morphing Shapes
This tiny source code snippet uses PlayBASIC's shapes to draw batches of line fragments. The fragments are all connected in a circle were each vertex is waving and rotating. On their own the effect is really simple; but when you overlay (rotate and scale) a bunch of them on top of each other it creates a sort of button effect similar to the robotic voice in the classic science function movie 2001 A Space Odyssey. Excuse my poor impressions of Hal in this video.. It's just for laughs
[ Links ]
- Buy 2001 A Space Odyssey [1968] (Region Free)
- Music:
The Right Direction by Shane Ivers - https://www.silvermansound.com
Movie samples - https://movie-sounds.org/
This tiny source code snippet uses PlayBASIC's shapes to draw batches of line fragments. The fragments are all connected in a circle were each vertex is waving and rotating. On their own the effect is really simple; but when you overlay (rotate and scale) a bunch of them on top of each other it creates a sort of button effect similar to the robotic voice in the classic science function movie 2001 A Space Odyssey. Excuse my poor impressions of Hal in this video.. It's just for laughs
PlayBASIC Code:
; PROJECT : Morphing Shape Tunnel ; AUTHOR : Learn To Code PlayBASIC - http://PlayBASIC.com ; CREATED : 11/05/2022 ; EDITED : 13/05/2022 ; --------------------------------------------------------------------- openscreen 1280,960,32,1 positionscreen getscreenxpos(),10 Count=360*3 RingShape = NewShape(Count, Count) // Set the edge links for this shape. For lp =0 to Count-2 SetShapeEdge RingShape,lp, lp,lp+1 next ; // link the last one back to the first SetShapeEdge RingShape,lp,lp,0 Screen=NewFxImage(GetSurfaceWidth(),GetSurfaceHeight()) Scaler#=2 Rings=10 Ringcolour=$505050 ColourCountDown=200 do rendertoimage Screen inkmode 1+2048 boxc 0,0,getsurfacewidth(),getsurfaceheight(),true,$f0e0d0 mx#=getsurfacewidth()/2 my#=GetSurfaceheight()/2 Scaler#=wrapvalue(scaler#+0.25,1,100) for lp =0 to Count-1 ; randomly init the vertex as polar coordinates Angle#=(360.0/Count)*lp ; Radius# =120+cosRadius(WobbleAngle2#+lp*1.23,34)+ Cos(WobbleAngle#+(Angle#*Scaler#))*50 Radius# =90+cos(WobbleAngle#+(Angle#*Scaler#))*50 setshapevertex RingShape,lp,Cosradius(Angle#,Radius#) ,Sinradius(Angle#,Radius#) next ; WobbleAngle2#+=0.43 WobbleAngle#-=(2.25)*4 lockbuffer Scale#=0.5 inkmode 1+64 for lp=0 to Rings ink RgbFade( Ringcolour, Float(lp)/Rings *50) rotateshape ringShape,SpinAngle#+lp*10,Scale# drawshape RingShape,mx#,my#,1 Scale#+=0.33 next unlockbuffer SpinAngle#+=0.2 rendertoscreen drawimage Screen,0,0,false ColourCountDown-- if ColourCountDown<0 ColourCountDown=30 Ringcolour= rgbalphaadd( (rndrgb() and $3f3f3f), $080808) endif sync loop spacekey()
[ Links ]
- Buy 2001 A Space Odyssey [1968] (Region Free)
- Music:
The Right Direction by Shane Ivers - https://www.silvermansound.com
Movie samples - https://movie-sounds.org/