g_mouseBufferX->add(g_mouseState.lX * fElapsedTime);
g_mouseBufferY->add(g_mouseState.lY * fElapsedTime);
double x = g_mouseBufferX->getWeightedMean();
double y = g_mouseBufferY->getWeightedMean() ;
g_camera->yaw(x);
g_camera->pitch(y);
Camera Rotation dependend on FPS?
Hello,
in my application I use a first person camera class and the rotation is performed by moving the mouse. Every frame I do this:
g_mouseState holds the current relative mouse movement and fElapsedTime is the elapsed time since the last frame. g_mouseBuffer is just a buffer that holds the last 10 mouse movements and calculates the average to smooth jerky mouse movements.
The problem is now: I have to techniques - technique A has 200fps on my machine and technique B about 1400fps. If I run technique B the rotation speed is fine, but if I run technique B the rotation of the camera is really slow. Its obvious that since technique B is faster the B values of fElapsedTime are much smaller and the rotation in every frame is smaller. But since B also performes more frames the total rotation every second should be the same, shoudlnt it?
I mean its the same if I rotate 4 times 0.25 Degrees or 1 time 1 degree.
Does anyone have an idea why my rotation is slower if I have more fps?
I would assume your implementation of getWeightedMean() compensates for different fElapsedTime per entry, but your Add() call suggests otherwise.
Just because you have 1400hz doesn't mean each sample in that 10-entry buffer is uniformly 712 microseconds apart. Some could be 600 microseconds and others 800 microseconds. Consequently your 10 frame average could well be the average X coordinate from 8 milliseconds or 6 milliseconds...
Jack
Just because you have 1400hz doesn't mean each sample in that 10-entry buffer is uniformly 712 microseconds apart. Some could be 600 microseconds and others 800 microseconds. Consequently your 10 frame average could well be the average X coordinate from 8 milliseconds or 6 milliseconds...
Jack
The buffer just exists to smooth the mouse movement so I guess the true problem has nothing to do with the buffer itself.
Even if I use this simple code per frame:
then rotations are still much slower with high fps. Of course you are right that with a framerate of 1400Hz I wont get fElapsedTime values of exactly 1/1400s but the average amount per second should indeed be 1/1400s.
I thought the whole "multiply all changes by elapsed time" just exists to make movments independend on framerate?
Even if I use this simple code per frame:
g_camera->yaw(g_mouseState.lX * fElapsedTime);g_camera->pitch(g_mouseState.lY * fElapsedTime);
then rotations are still much slower with high fps. Of course you are right that with a framerate of 1400Hz I wont get fElapsedTime values of exactly 1/1400s but the average amount per second should indeed be 1/1400s.
I thought the whole "multiply all changes by elapsed time" just exists to make movments independend on framerate?
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement