3d Mouse Control

Blitz3D Forums/Blitz3D Beginners Area/3d Mouse Control

try this- very rough but explains my idea

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