Code archives/3D Graphics - Misc/Watch

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

Download source code

Watch by jfk EO-111102004
Just a simple example. It shows how to buid a realtime working analog watch with some built-in 3D-primitives, no external files required.

Think about to implement an Alarm with the beep dll...
Graphics3D 640,480,32,2
SetBuffer BackBuffer()

camera=CreateCamera()
TranslateEntity camera,0,0,-30
CameraClsMode camera,0,1

light=CreateLight()
RotateEntity light,45,45,45

zeiger1=CreateCube() ; second
RotateMesh zeiger1,0,45,0
FitMesh zeiger1,-1,0,-1,2,2,2
ScaleMesh zeiger1,.3,10,.3
EntityColor zeiger1,200,200,255

zeiger2=CreateCube() ; minute
RotateMesh zeiger2,0,45,0
FitMesh zeiger2,-1,0,-1,2,2,2
ScaleMesh zeiger2,.6,8,.6
EntityColor zeiger2,100,100,255
TranslateEntity zeiger2,0,0,1

zeiger3=CreateCube() ; hour
RotateMesh zeiger3,0,45,0
FitMesh zeiger3,-1,0,-1,2,2,2
ScaleMesh zeiger3,1,6,1
EntityColor zeiger3,0,0,255
TranslateEntity zeiger3,0,0,2

ce=CreateSphere()
ScaleEntity ce,2,2,2

For i=0 To 59
 cu=CreateCube()
 PositionEntity cu,Sin(i*6)*20,Cos(i*6)*20,0
 RotateEntity cu,0,0,-i*6
 ScaleEntity cu,.1,.1,.1
 If (Float(i)/5.0)=(i/5) Then ScaleEntity cu,.3,.3,.3
 If (Float(i)/15.0)=(i/15) Then ScaleEntity cu,.5,.5,.5
Next

While KeyDown(1)=0
 t$=CurrentTime$()
 If t$<>old_t$
  old_t$=t$
  second#=0+(Right$(t$,2))
  minute#=0+(Mid$(t$,4,2))
  hour#=(0+(Left$(t$,2))) : hour#=hour#+(minute#/60.0)

  RotateEntity zeiger1,0,0,(-second*6.0)
  RotateEntity zeiger2,0,0,(-minute*6.0)
  RotateEntity zeiger3,0,0,(-hour*30.0)
  Cls
  Text GraphicsWidth()/2,GraphicsHeight()*.33,"RELAX",1,1
  Text GraphicsWidth()/2,GraphicsHeight()*.66,"QUARTZ",1,1
  RenderWorld()
  Flip
 EndIf
 Delay 5
Wend

Comments

big10p2004
Nifty! It's amazing what you can do in such few lines of B3D code. :)


jfk EO-111102004
True. Btw. had a little bug, just fixed it (rotateentity cu...)


Bot Builder2004
Cool! This runs with 2% usage of my CPU might be a little less accurate though:
While KeyDown(1)=0
	t$=CurrentTime$()
	
	second#=0+(Right$(t$,2))
	minute#=0+(Mid$(t$,4,2))
	hour#=(0+(Left$(t$,2))) : hour#=hour#+(minute#/60.0)
	
	RotateEntity zeiger1,0,0,(-second*6.0)
	RotateEntity zeiger2,0,0,(-minute*6.0)
	RotateEntity zeiger3,0,0,(-hour*30.0)
	Cls
	Text GraphicsWidth()/2,GraphicsHeight()*.33,"RELAX",1,1
	Text GraphicsWidth()/2,GraphicsHeight()*.66,"QUARTZ",1,1
	RenderWorld()
	Flip
	Delay (1000-(MilliSecs() Mod 1000))
Wend



jfk EO-111102006
It took me 2 years to find this bug:

If t$<>old_t$
oldt$=t$

should of course be

If t$<>old_t$
old_t$=t$

So now it should be less CPU hungry.


puki2006
This has been noted and filed.


Code Archives Forum