How do you setup a mouse output to rotate an angle, relative to time only?
I cant seem to make a rotation the same speed, with varying FPS counts.
ie. at 60 fps, or 6000 FPS , the angle must rotate nearly the same speed.
I have tried mouseaxis and gettimer together, in multple ways, and i always end up with extremely different sums over the same amount of time.
I also tried using mousestate in various ways, and nothing seems to solve the problem.
Yes, the mouse co-ordinates are not affected by frames per second>
What code are you using to turn the mouse? Can you provide an example?
http://www.glbasic.com/forum/index.php?topic=3851.0
i changed the limitfps to 60, and the difference is very noticable.
you can do this with any 3d glbinary program to see it as an example.
That is down to the example, no the lib or glbasic commands. The example is altering rotational values, which in turn are added to the (separate) rotation of the camera. The more speed you give each frame, the faster the value will be added to the rotation of the camera.
I will make an example using absolute rotational values from mouse input as soon as I can tomorrow. :bed:
NM, just a quickly before bed.
Here's is a slightly altered version of the original demo to show absolute values begin used for the mouse rotation.
Check the newly remarked lines to highlight the changes.
Ian
// --------------------------------- //
// Project: 6DOFCam_test
// Start: Thursday, November 19, 2009
// IDE Version: 7.177
LOCAL cam1 AS Tcamera
LOCAL speed# = .01 // 00 no flow at start
LOCAL xv#, yv#, zv#, p#=0, r#=0, y#=0
LOCAL mx%, my%, mw%, mba%, mbb%
cam1.x = 0
cam1.y = 0
cam1.z = 0
cam1.lx = 0
cam1.ly = 0
cam1.lz = -1
cam1.ux# = 0
cam1.uy# = 1
cam1.uz# = 0
cam1.rx = 1
cam1.ry = 0
cam1.rz = 0
cam1.FOV = 45
cam1.aspect = 1024/768
cam1.nearClip = .01
cam1.farClip = 5000
WHILE TRUE
MOUSESTATE mx, my, mba, mbb
// mx = MOUSEAXIS(0)/10
// my = -MOUSEAXIS(1)/10
mx = MOUSEAXIS(0)
my = -MOUSEAXIS(1)
X_6DOFCAMERA(cam1)
//Linear Velocity Dampening (SPACE)
IF KEY(57)
xv = xv * .95
yv = yv * .95
zv = zv * .95
ENDIF
//Angular Velocity Dampening (CTRL)
IF KEY(29)
r = r * .95
p = p * .95
y = y * .95
ENDIF
//Accelerate Forward (W)
IF KEY(17)
xv = xv + (cam1.lx - cam1.x) * speed
yv = yv + (cam1.ly - cam1.y) * speed
zv = zv + (cam1.lz - cam1.z) * speed
ENDIF
//Accelerate Backward (S)
IF KEY(31)
xv = xv - (cam1.lx - cam1.x) * speed
yv = yv - (cam1.ly - cam1.y) * speed
zv = zv - (cam1.lz - cam1.z) * speed
ENDIF
//Accelerate Left (A)
IF KEY(30)
xv = xv + (cam1.rx - cam1.x) * speed
yv = yv + (cam1.ry - cam1.y) * speed
zv = zv + (cam1.rz - cam1.z) * speed
ENDIF
//Accelerate Right (D)
IF KEY(32)
xv = xv - (cam1.rx - cam1.x) * speed
yv = yv - (cam1.ry - cam1.y) * speed
zv = zv - (cam1.rz - cam1.z) * speed
ENDIF
//Accelerate Down (F)
IF KEY(33)
xv = xv + (cam1.ux - cam1.x) * speed
yv = yv + (cam1.uy - cam1.y) * speed
zv = zv + (cam1.uz - cam1.z) * speed
ENDIF
//Accelerate Up (R)
IF KEY(19)
xv = xv - (cam1.ux - cam1.x) * speed
yv = yv - (cam1.uy - cam1.y) * speed
zv = zv - (cam1.uz - cam1.z) * speed
ENDIF
// // change IF the left mouse button is pressed
// IF mba = 1
// //Pitch mouse up AND
// p = p + my
// //Yaw
// y = y + mx
// ELSEIF mbb = 1
// //Roll with right mouse button
// r = r + mx
// ENDIF
r = 0
p = 0
y = 0
IF mba = 1
//Pitch mouse up AND
p = my
//Yaw
y = mx
ELSEIF mbb = 1
//Roll with right mouse button
r = mx
ENDIF
cam1.x = cam1.x + xv
cam1.y = cam1.y + yv
cam1.z = cam1.z + zv
cam1.lx = cam1.lx + xv
cam1.ly = cam1.ly + yv
cam1.lz = cam1.lz + zv
cam1.rx = cam1.rx + xv
cam1.ry = cam1.ry + yv
cam1.rz = cam1.rz + zv
cam1.ux = cam1.ux + xv
cam1.uy = cam1.uy + yv
cam1.uz = cam1.uz + zv
debug_view(0,0,0,100,RGB(255,255,0),RGB(255,0,255),RGB(0,255,255))
camera_roll(cam1,r)
camera_pitch(cam1,p)
camera_yaw(cam1,y)
X_MAKE2D
PRINT "Cam Pitch = "+p,10,10
PRINT "Cam Yaw = "+y,10,20
PRINT "Cam Roll = "+r,10,30
SHOWSCREEN
WEND
FUNCTION debug_view: x, y, z, crad, rgb1, rgb2, rgb3
LOCAL rad, x1, y1, j, x2, y2
y1=SIN(0)*crad
x1=COS(0)*crad
FOR j=4 TO 360 STEP 4
y2=SIN(j)*crad
x2=COS(j)*crad
X_LINE x+x1,y+y1,z , x+x2,y+y2,z,0.1,rgb1
X_LINE x+x1,y+0,y1+z, x+x2,y+0,y2+z,1,rgb2
X_LINE x+0,y+x1,y1+z, x+0,y+x2,y2+z,1,rgb3
x1=x2
y1=y2
NEXT
X_DOT x,y,z,10,rgb1
X_DRAWAXES x+crad,y,z
X_DRAWAXES x-crad,y,z
X_DRAWAXES x,y+crad,z
X_DRAWAXES x,y-crad,z
X_DRAWAXES x,y,crad+z
X_DRAWAXES x,y,-crad+z
X_PRINT "RIGHT X+",x+crad,y,z,0
X_PRINT "LEFT X-",x-crad,y,z,0
X_PRINT "UP Y+",x,y+crad,z,0
X_PRINT "DOWN Y-",x,y-crad,z,0
X_PRINT "OUT Z+",x,y,crad+z,0
X_PRINT "IN Z-",x,y,-crad+z,0
X_SETTEXTURE -1, -1
ENDFUNCTION
I figgured it out buddy..took a while to figgure out.
What i did was make a distance calculator, a calculator of mouse output into an input computing the sum of movement at 36 fps, regardless of program fps.
It buffers the travel distance, with a limits of 10 position per calculator frame.
This limits the entire output to 360 positions per second.
This is perfect for 3d rotations, i can adjust precisely how many degrees per second an entity rotates.
The function is sloppy, ill post in it when it is optimized.
I am glad you worked it out my friend, have a good one. :good: