Code archives/3D Graphics - Effects/Alpha cubes demo

This code has been declared by its author to be Public Domain code.

Download source code

Alpha cubes demo by BlitzSupport2001
Just run it and click the mouse until you're bored or feel trippy :)

(Note that there's no frame-skipping code here, and combining this with loads of alpha-blending, you might see slowdown with loads of cubes on the go!)
; Use left mouse button... note lack of frame-limiting code!

Type Timer
	Field start
	Field timeOut
End Type

Function SetTimer.Timer (timeOut)
	t.Timer = New Timer
	t\start   = MilliSecs ()
	t\timeOut = t\start + timeOut
	Return t
End Function

Function TimeOut (test.Timer)
	If test <> Null
		If test\timeOut < MilliSecs ()
			Delete test
			Return 1
		EndIf
	EndIf
End Function

Graphics3D 640, 480

SetBuffer BackBuffer ()

SeedRnd (MilliSecs ())

Global piv = CreatePivot ()
cam = CreateCamera (piv)
PositionEntity cam, 0, 0.1, -5
PointEntity cam, piv
CameraZoom cam, 5

AmbientLight 32, 32, 32

light = CreateLight ()
PositionEntity light, -5, 0, -5

Global cube = CreateCube ()
HideEntity cube

Type cubes
	Field entity
	Field alpha#
	Field incdec
	Field kill
	Field zacc#
End Type

Global spawn = 4000
Global newCube.Timer = SetTimer (spawn)
Global alpha.Timer   = SetTimer (50)

Repeat

	If KeyHit (17) Then w = 1 - w: WireFrame w

	UpdateGame ()
	UpdateWorld
	RenderWorld
	Flip
	
Until KeyHit (1)

End

Function UpdateGame ()

	TurnEntity piv, 0, 0, 0.1
	
	For a.cubes = Each cubes
		TurnEntity a\entity, a\zacc, 2, a\zacc
		TranslateEntity a\entity, 0, 0, a\zacc * (a\kill * -1)
	Next

	If MouseHit (1)

		cubelist.cubes = New cubes
		cubelist\entity  = CopyEntity (cube)
		cubelist\alpha = 0
		cubelist\incdec = 1
		cubelist\kill = -1
		cubelist\zacc = Rnd (0.025, 1)
		EntityAlpha cubelist\entity, cubelist\alpha
		EntityColor cubelist\entity, Rnd (100, 255), Rnd (100, 255), Rnd (100, 255)
		EntityShininess cubelist\entity, Rnd (0.01, 1)

	EndIf

	If TimeOut (newCube)

		cubelist.cubes = New cubes
		cubelist\entity  = CopyEntity (cube)
		cubelist\alpha = 0
		cubelist\incdec = 1
		cubelist\kill = -1
		cubelist\zacc = Rnd (0.01, 0.5)
		EntityAlpha cubelist\entity, cubelist\alpha
		EntityColor cubelist\entity, Rnd (100, 255), Rnd (100, 255), Rnd (100, 255)
		EntityShininess cubelist\entity, Rnd (0.01, 1)

		newCube.Timer = SetTimer (spawn)

	EndIf

	If TimeOut (alpha)

		For a.cubes = Each cubes
		
			If a\incdec
				a\alpha = a\alpha + a\zacc / 10
			Else
				a\alpha = a\alpha - a\zacc / 10
			EndIf
			
			If a\alpha => 1
				a\incdec = 0
				a\kill = 1
			EndIf

			EntityAlpha a\entity, a\alpha

			If a\alpha <= 0
				If a\kill = 1
					FreeEntity a\entity
					Delete a
				EndIf
			EndIf

		Next

		alpha.Timer = SetTimer (50)

	EndIf

End Function

Comments

None.

Code Archives Forum