3Dマウス、作ってみました。地面となるオブジェクトに高低差を設ける場合はintersect objectコマンドを使えば
簡単に実現できるのではないでしょうか。マウスクリックで移動、矢印キーでカメラの移動&パンです。
sync on:sync rate 60
make camera 1
set current camera 1
color backdrop 1,0
make object box 1,1000,1,1000
make object sphere 2,30:color object 2,rgb(255,0,0)
make object sphere 3,30:position object 3,0,1,0:scale object 3,100,3,100:color object 3,rgb(0,0,255)
position camera 0,150,-300:position object 2,0,15,0
do
fps$="3D mouse Example Fps: "+str$(screen fps())
text screen width()-20-text width(fps$),screen height()-40,fps$
text 0,20,mes$
if mouseclick()
flag=pick object (mousex(),mousey(),1,1)
mx=get pick vector x():my=get pick vector y():mz=get pick vector z()
mes$="x;"+str$(mx)+"y;"+str$(my)+"z;"+str$(mz)
targetx=mx+camera position x(1)
targety=my+camera position y(1)
targetz=mz+camera position z(1)
position object 3,targetx,targety+1,targetz
endif
point object 2,targetx,targety+15,targetz
spd#=((abs(object position x(2)-object position x(3))+abs(object position z(2)-object position z(3))))
move object 2,spd#/50
control camera using arrowkeys 1,2,2
sync
loop