Someone requested this, but it got answered before I could respond.
sync on
hide mouse
null = make vector3(1)
null = make vector3(2)
null = make matrix4(3) : projection matrix4 3
null = make matrix4(4) : view matrix4 4
null = make matrix4(5) : world matrix4 5
rem just to give some 3d visual reference
make object cube 1,20
position object 1,40,0,350
make matrix 1,1000,1000,30,30
do
project3dTo2d(1,40,0,350)
view matrix4 4
project vector3 1,2,3,4,5
gosub camera_stuff
circle x vector3(1),y vector3(1),5
sync
loop
function project3dTo2d(result as integer,x as float, y as float, z as float)
set vector3 2,x,y,z
view matrix4 4
project vector3 1,2,3,4,5
endfunction
camera_stuff:
oldcx#=cx#
oldcz#=cz#
speed# = 5
if upkey()=1
cx#=newxvalue(cx#,a#,speed#)
cz#=newzvalue(cz#,a#,speed#)
endif
if downkey()=1
cx#=newxvalue(cx#,a#,-speed#)
cz#=newzvalue(cz#,a#,-speed#)
endif
if leftkey()=1
cx#=newxvalue(cx#,wrapvalue(a#-90.0),speed#)
cz#=newzvalue(cz#,wrapvalue(a#-90.0),speed#)
endif
if rightkey()=1
cx#=newxvalue(cx#,wrapvalue(a#+90.0),speed#)
cz#=newzvalue(cz#,wrapvalue(a#+90.0),speed#)
endif
if shiftkey() then inc cy#, 2
if controlkey() then dec cy#, 2
a#=wrapvalue(a#+(mousemovex()/3.0))
cxa#=cxa#+(mousemovey()/3.0)
if cxa#<-90.0 then cxa#=-90.0
if cxa#>90.0 then cxa#=90.0
cy# = 0
position camera cx#,cy#+100,cz#
rotate camera wrapvalue(cxa#),a#,0
RETURN
"eureka" - Archimedes