Mouselook is really...odd.

BlitzMax Forums/MiniB3D Module/Mouselook is really...odd.

Chroma(Posted 2007) [#1]
I'm not sure why but when I read the mousexspeed and then do a movemouse to the center of the screen, I can't get a reading from mousexspeed that accurate in minib3d. Everything is fine until I do a yaw = yaw - mxspd. Then yaw = -400. I must be missing something.

For instance:
[code]
mxspd:Float = MouseXSpeed()
movemouse 400,300
yaw:float :- mxspd
rotateentity camera,0,yaw,0
[code]

The above code doesn't work and just sits at 400. Anyone wanna take a stab at this?


Chroma(Posted 2007) [#2]
Honestly, try this...it's very irritating...

yaw = - 400

I can't see why unless MouseXSpeed() is bugged and returning the position of MouseX().

'mouselook
mxspd:Float = MouseXSpeed()
MoveMouse 400,300
yaw:Float = yaw - mxspd
RotateEntity camera,0,yaw,0



Chroma(Posted 2007) [#3]
Ok FINALLY...

This is working:

'mouselook
mxspd:Float = MouseXSpeed2() / 15.0
myspd:Float = MouseYSpeed2() / 15.0
If mxspd <> 0 Or myspd <> 0 Then
	MoveMouse 400,300
	lastMX = MouseX()
	lastMY = MouseY()
EndIf
yaw:Float :- mxspd
pitch:Float :+ myspd
RotateEntity camera,pitch,yaw,0



Chroma(Posted 2007) [#4]
I still had to use a custom MouseXSpeed because the built in keeps returning the mouse position.

Getting better:

'mouselook
mxspd:Float = MouseXSpeed2() / 10.0
myspd:Float = MouseYSpeed2() / 10.0
If mxspd <> 0 Or myspd <> 0 Then
	MoveMouse 400,300
	lastMX = MouseX()
	lastMY = MouseY()
EndIf
yaw:Float :- mxspd
pitch:Float :+ myspd
If pitch => 89 Then pitch = 89
If pitch =< -89 Then pitch = -89
yaw2:Float :+ ((yaw - yaw2) * 20.0) * dt
pitch2:Float :+ ((pitch - pitch2) * 20.0) * dt
RotateEntity camera,pitch2,yaw2,0


Function MouseXSpeed2:Int()
	Local mxcur:Int = MouseX() - lastMX
	lastMX = MouseX()
	Return mxcur
End Function

Function MouseYSpeed2:Int()
	Local mycur:Int = MouseY() - lastMY
	lastMY = MouseY()	
	Return mycur
End Function



Chroma(Posted 2007) [#5]
I haven't used MiniB3D much obviously. But I can't get smooth movement like in Blitz3D. Even with smoothing, the mouselook has a slight awkwardness to it.

Anyone able to get really smooth movement in this?


Chroma(Posted 2007) [#6]
Looks like Graphics3D 1024,768,32,1 doesn't set the graphics mode to the default monitor refresh. Mine's set to 85 and it's defaulting to 60. Running fullscreen is taking away the slight choppiness. Still making progress.


Chroma(Posted 2007) [#7]
Apparently there's some sort of flush thing going on with MouseXSpeed.

This is working quite well:
	'MouseLook BMax
	mxs:Float = MouseXSpeed() / 15.0
	mys:Float = MouseYSpeed() / 15.0
	If mxs <> 0 Or myx <> 0
		MoveMouse width/2,height/2
		MouseXSpeed() ' flush
		MouseYSpeed() ' flush
	EndIf
	yaw:Float :- mxs
	pit:Float :+ mys
	yaw2:Float :+ ((yaw - yaw2) * 25.0) * dt
	pit2:Float :+ ((pit - pit2) * 25.0) * dt
	RotateEntity camera,pit2,yaw2,0



Chroma(Posted 2007) [#8]
Yep all graphics are defaulting to 60 hertz. Anyone know how to set the hertz in MiniB3D?


Panno(Posted 2007) [#9]
wow a only croma thread


Chroma(Posted 2007) [#10]
Hey, no posting in my thread! =p


Chroma(Posted 2007) [#11]
Ahhh....there's an EXTRA argument in Graphics3d!


Chroma(Posted 2007) [#12]
What would be cool is to detect the current hertz of the desktop and default to that.


Chroma(Posted 2007) [#13]
Wa la. On average I'm getting about 600 more fps than Blitz3D with the 200 cubes. I'm impressed.

'BMax MiniB3D MouseLook
'by Chroma

Strict

Import "MiniB3D.bmx"


Local width:Int = 1024, height:Int = 768
Graphics3D width,height,32,1,85

Global camera:TCamera = createcamera()
CameraRange camera,1,5000

Local light:TLight = CreateLight()

' FPS Init
Local old_ms=MilliSecs()
Local renders
Local fps

' Delta Time Init
Global dt:Float,NewTime:Int,OldTime:Int,TotalTime:Float=0
NewTime = MilliSecs()
OldTime = NewTime

' cubes
For Local n:Int = 1 To 200
	Local hhh:TMesh = CreateCube()
        EntityColor hhh,Rand(0,255),Rand(0,255),Rand(0,255)
	ScaleEntity hhh, Rand(1,50),Rand(1,50),Rand(1,50)
	PositionEntity hhh, Rand(-1000,1000),Rand(-1000,1000),Rand(-1000,1000)
Next

' MouseLook Init
Local yaw:Float, pit:Float, yaw2:Float, pit2:Float
HideMouse
MoveMouse width/2,height/2
TBlitz2D.MouseXSpeed()
TBlitz2D.MouseYSpeed()
Local mspd:Float = 14.0
Local msmo:Float = 22.0

' *** MAIN LOOP ***
While Not KeyHit(KEY_ESCAPE)
Cls


'Update Delta Time
Delta_Time()


'MouseLook BMax
Local mxs:Float = TBlitz2D.MouseXSpeed() / mspd
Local mys:Float = TBlitz2D.MouseYSpeed() / mspd
If mxs <> 0 Or mys <> 0
	MoveMouse width/2,height/2
	TBlitz2D.MouseXSpeed()
	TBlitz2D.MouseYSpeed()
EndIf
yaw :- mxs
pit :+ mys
yaw2 :+ ((yaw - yaw2) * msmo) * dt
pit2 :+ ((pit - pit2) * msmo) * dt
RotateEntity camera,pit2,yaw2,0


' ** Update 3D **
RenderWorld


' FPS
renders :+ 1
If MilliSecs()-old_ms>=1000
	old_ms=MilliSecs()
	fps=renders
	renders=0
EndIf
Text 0,0,"FPS: "+String(fps)


Flip 0
Wend
EndGraphics
End

Function Delta_Time()
	NewTime = MilliSecs()
	dt = Float (NewTime - OldTime)/1000.0
	OldTime = NewTime
	TotalTime = TotalTime + dt
End Function