try this- very rough but explains my idea
click and hold the color manipulator to move the cube
click and hold the color manipulator to move the cube
Graphics3D 640,480 Global midw = GraphicsWidth()/2 Global midh =GraphicsHeight()/2 Global cam = CreateCamera() : MoveEntity cam,0,5,-15 light = CreateLight() Global plane = CreateCube() : ScaleEntity plane,64,.25,64 : EntityAlpha plane,.5 planetex = CreateTexture(256,256) : ScaleTexture planetex,.025,.025 : SetBuffer TextureBuffer(planetex) Color 255,255,0 : Rect 0,0,255,255,0 EntityTexture plane,planetex Global cube = CreateCube() : EntityColor cube,255,0,0 Global MX# Global MY# ; manipulator m = CreatePivot() Global Xdir = CreateCone(5,1,m) : EntityColor xdir,255,0,0 : ScaleEntity Xdir,.25,1,.25 RotateEntity xdir,0,0,90 : TranslateEntity xdir,-1.25,0,0 Global Ydir = CreateCone(5,1,m) : EntityColor ydir,0,255,0 : ScaleEntity ydir,.25,1,.25 RotateEntity ydir,0,0,0 : TranslateEntity ydir,0,1.25,0 Global zdir = CreateCone(5,1,m) : EntityColor zdir,0,0,255 : ScaleEntity zdir,.25,1,.25 RotateEntity zdir,90,0,0 : TranslateEntity zdir,0,0,1.25 EntityPickMode xdir,2 : EntityPickMode ydir,2 : EntityPickMode zdir,2 MoveEntity m,-2,5,-12 SetBuffer BackBuffer() Repeat If MouseDown(1) = 1 Then campick() RenderWorld debug() Flip Until KeyHit(1) = 1 End ;================================================================================== Function curvevalue#(newvalue#,oldvalue#,increments# ) If increments>1 Then oldvalue#=oldvalue#-(oldvalue#-newvalue#)/increments If increments<=1 Then oldvalue=newvalue Return oldvalue# End Function ;================================================================================== Function campick() pictentity = 0 mox = MouseX() moy = MouseY() foo = MouseYSpeed() : foo = MouseXSpeed() ; flush CameraPick(cam,MouseX(),MouseY()) pictentity = PickedEntity() If Pictentity<>0 ;MY# = MouseYSpeed()/64 ;MY#=curvevalue#(MouseYSpeed(),MY#,128 ) ;MX#=curvevalue#(MouseXSpeed(),MX#,128 ) pcx# = PickedX#() pcy# = PickedY#() pcz# = PickedZ#() If pictentity = xdir Repeat MY#=curvevalue#(MouseYSpeed(),MY#,3 )/16 MX#=curvevalue#(MouseXSpeed(),MX#,3 )/16 MoveEntity cube,mx#,0,0 MoveMouse mox,moy RenderWorld : debug() : Flip Until MouseDown(1) = 0 EndIf If pictentity = ydir Repeat MY#=curvevalue#(MouseYSpeed(),MY#,3 )/16 MX#=curvevalue#(MouseXSpeed(),MX#,3 )/16 MoveEntity cube,0,-MY#,0 MoveMouse mox,moy RenderWorld : debug() : Flip Until MouseDown(1) = 0 EndIf If pictentity = zdir Repeat MY#=curvevalue#(MouseYSpeed(),MY#,3 )/16 MX#=curvevalue#(MouseXSpeed(),MX#,3 )/16 MoveEntity cube,0,0,MY# MoveMouse mox,moy RenderWorld : debug() : Flip Until MouseDown(1) = 0 EndIf EndIf End Function Function debug() cx# = EntityX(cube) cy# = EntityY(cube) cz# = EntityZ(cube) CameraProject(cam,cx#,cy#,cz#) dstring$ = "X: "+cx#+" Y: "+cy#+" Z: "+cz# p# = (Len(dstring$)*FontWidth())/2 Text ProjectedX#()-p#,ProjectedY#(),dstring$ End Function