Very nice, Latch!
If you use multiple 3D views, I suggest you don't render all windows in the same loop, because it will lag.
What I do in my games is render each window separately, so if I have 4 windows, it will render the 1st in the 1st loop, 2nd in the 2nd loop, 3rd in the 3rd loop and 4th in the 4th loop, and then render the 1st one again in the 5th loop and so on. The object rotating will rotate as fast in 100 windows as in 1 window, but the frame rate per window will decrease, so with 100 windows, each window would only be updated every 100th loop...
Actually, I got that from Latch... So thanks latch!
Anyway, here's the code:
rem 3D view in multiple windows
rem by TheComet
rem set highest resolution
perform checklist for display modes
for t=1 to checklist quantity()
a=checklist value a(t)
b=checklist value b(t)
c=checklist value c(t)
if a>width then width=a
if b>height then height=b
if c>depth then depth=c
next t
set display mode width,height,depth
rem setup screen
sync on
sync rate 60
backdrop on
show mouse
rem arrays
dim winx(100)
dim winy(100)
dim incx(100)
dim incy(100)
rem make a button
create bitmap 1,80,30
ink rgb(128,128,128),0
box 0,0,79,29
ink rgb(90,90,90),0
line 79,0,79,29
line 79,29,0,29
ink rgb(255,255,255),0
line 0,0,79,0
line 0,0,0,29
ink rgb(10,10,10),0
center text 40,2,"New"
get image 1,0,0,80,30
delete bitmap 1
rem make a cube and a matrix
make matrix 1,1000,1000,20,20
position matrix 1,-500,-10,-500
make object cube 1,10
rem main loop
max_view=1
ink rgb(255,255,255),0
do
rem info
center text screen width()/2,0,"Resolution : "+str$(screen width())+"*"+str$(screen height())+"*"+str$(screen depth())
center text screen width()/2,20,"3D Windows : "+str$(max_view)
rem button
sprite 1,0,0,1
if mousex()<80 and mousey()<30 and mouseclick()=1 and click=0 then inc max_view:click=1:cls
if mouseclick()=0 then click=0
rem rotate cube
yrotate object 1,wrapvalue(object angle y(1)+2)
rem display current view
inc view:if view>max_view then view=1
set camera view winx(view),winy(view),winx(view)+300,winy(view)+200
rem move view
for t=1 to max_view
if incx(t)=0 then winx(t)=winx(t)+1:if winx(t)>screen width()-301 then incx(t)=1
if incx(t)=1 then winx(t)=winx(t)-1:if winx(t)<1 then incx(t)=0
if incy(t)=0 then winy(t)=winy(t)+1:if winy(t)>screen height()-201 then incy(t)=1
if incy(t)=1 then winy(t)=winy(t)-1:if winy(t)<1 then incy(t)=0
next t
rem refresh screen
sync
rem draw a box around window
ink 0,0
line winx(view)-1,winy(view)-1,winx(view)+301,winy(view)-1
line winx(view)+301,winy(view)-1,winx(view)+301,winy(view)+201
line winx(view)+301,winy(view)+201,winx(view)-1,winy(view)+201
line winx(view)-1,winy(view)+201,winx(view)-1,winy(view)-1
ink rgb(255,255,255),0
rem end of main loop
loop
The windows leave an ugly trail, but don't let that bother you. Click the "New" button to create new windows, and have fun!
TheComet

Make the path of your enemies easier with Waypoint Pro!