Entry 3
remstart
-------------------------------------------------------------------
program name: matrix clock
-------------------------------------------------------------------
written by: latch
date: 18-01-2007
-------------------------------------------------------------------
comments: clock using matrix point heights
-------------------------------------------------------------------
remend
set display mode 800,600,32
autocam off
sync on
sync rate 60
hide mouse
rem =============================================================
rem = Array to hold number data
rem =============================================================
tilex=69
tilez=18
dim number(9,tilez,tilex)
for n = 0 to 9
for z = 0 to tilez
for x = 0 to 8
read number(n,z,x)
next x
next z
next n
rem =============================================================
rem = CREATE MATRIX
rem =============================================================
make matrix 1,tilex,tilez,tilex,tilez
rem add colons
for z = 0 to tilez
for x = 0 to 1
read y
set matrix height 1,x+46,z,y*3
set matrix height 1,x+22,z,y*3
next x
next z
`SET MATRIX Matrix Number, Wireframe, Transparency, Cull, Filter, Light, Fog, Ambient
set matrix 1,1,1,1,1,1,1,0
update matrix 1
rem =============================================================
rem = MAKE CASE TO HOLD CLOCK
rem =============================================================
make object box 1,69,6,18
color object 1,rgb(0,10,255)
ghost object on 1
position object 1,34.5,3,9
position camera tilex/2,50,-10
xrotate camera 75
rem =============================================================
rem = MAIN LOOP
rem =============================================================
gosub _lighting
color backdrop 0
do
gosub _time_pos
gosub _move_spot
rem move camera left and right
camx#=camera position x()
if leftkey()=1 then camx#=camera position x()-.5
if rightkey()=1 then camx#=camera position x()+.5
position camera camx#,camera position y(),camera position z()
rem info
text 0,0,"Move camera left + right with arrow keys"
sync
loop
end
rem =============================================================
rem = SUB-ROUTINES
rem =============================================================
_time_pos:
height=5
a$=get time$()
sizet=len(a$)
rem get seconds
sec1=val(mid$(a$,sizet))
sec2=val(mid$(a$,sizet-1))
rem get minutes
min1=val(mid$(a$,sizet-3))
min2=val(mid$(a$,sizet-4))
rem get hours
hour1=val(mid$(a$,sizet-6))
hour2=val(mid$(a$,sizet-7))
for z = 0 to tilez
for x = 0 to 8
set matrix height 1,x+60,z,number(sec1,z,x)*height
set matrix height 1,x+49,z,number(sec2,z,x)*height
set matrix height 1,x+36,z,number(min1,z,x)*height
set matrix height 1,x+25,z,number(min2,z,x)*height
set matrix height 1,x+12,z,number(hour1,z,x)*height
set matrix height 1,x+1,z,number(hour2,z,x)*height
next x
next z
gosub _smooth_matrix
update matrix 1
return
`------------------------------------------------------------------------
_smooth_matrix:
rem from DarkBASIC example code
rem Author : DBS-LB
rem Date : 19th July 2000
rem Use matrix normals to make it smooth
for z=1 to tilez
for x=1 to tilex
rem Get matrix heights
h8#=get matrix height(1,x,z-1)
h4#=get matrix height(1,x-1,z)
h#=get matrix height(1,x,z)
h2#=get matrix height(1,x,z)
rem Calculate projected angle X using heights
x1#=(x-1)*25.0 : y1#=h#
x2#=(x+0)*25.0 : y2#=h4#
dx#=x2#-x1#
dy#=y2#-y1#
ax#=atanfull(dx#,dy#)
ax#=wrapvalue(90-ax#)
rem Calculate projected angle Z using heights
z1#=(z-1)*25.0 : y1#=h2#
z2#=(z+0)*25.0 : y2#=h8#
dz#=z2#-z1#
dy#=y2#-y1#
az#=atanfull(dz#,dy#)
az#=wrapvalue(90-az#)
rem Make normal from projected angle
nx#=sin(ax#)
ny#=cos(ax#)
nz#=sin(az#)
rem Setting matrix normal for smoothness
set matrix normal 1,x,z,nx#,ny#,nz#
next x
next z
return
`------------------------------------------------------------------------
_lighting:
make light 1
make light 2
make light 3
set point light 0,-30,5,10
color light 0,rgb(0,0,255)
set point light 1,100,5,10
color light 1,rgb(0,0,255)
set point light 2,34.5,8,20
color light 2,rgb(0,0,255)
set spot light 3,5,15
color light 3,rgb(0,200,100)
position light 3,35,60,0
point light 3,tilex/2,0,tilez/2
set ambient light 0
return
`-------------------------------------------------------------------------
_move_spot:
ang#=wrapvalue(ang#+.5)
rotate light 3,ang#,ang#,0
return
rem =============================================================
rem = DATA STATEMENTS
rem =============================================================
rem 0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,0,0,0,0,0,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 0,1,1,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem 1
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,0,1,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem 2
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,1,0,0
data 0,0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 0,1,1,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0,0
data 0,0,1,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem 3
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem 4
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,1,1,1,1,1,1
data 0,0,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 0,1,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,0,1,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem 5
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,1,1,1,1,1,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 0,1,1,1,1,1,1,0,0
data 0,0,1,1,1,1,1,1,0
data 0,0,0,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem 6
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,0,0
data 1,1,1,1,1,1,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0,0
data 0,1,1,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem 7
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,1,0,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 0,1,1,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem 8
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 0,1,1,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 0,1,1,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem 9
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,1,1,0
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1,1
data 0,0,0,1,1,1,1,1,1
data 0,0,1,1,1,1,1,1,1
data 0,1,0,1,1,1,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 1,1,1,0,0,0,1,1,1
data 0,1,1,1,1,1,1,1,0
data 0,0,1,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0,0
rem colon
data 0,0
data 0,0
data 0,0
data 0,0
data 0,0
data 0,0
data 1,1
data 1,1
data 0,0
data 0,0
data 0,0
data 1,1
data 1,1
data 0,0
data 0,0
data 0,0
data 0,0
data 0,0
data 0,0
Enjoy your day.