Jump to content

  • Log In with Google      Sign In   
  • Create Account

Random Jitter When Rotating Camera


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
6 replies to this topic

#1 DJTN   Members   -  Reputation: 207

Like
0Likes
Like

Posted 30 October 2012 - 03:24 PM

I’ve got an issue where my camera jitters when I rotate left or right. It’s random so pinpointing the problem has been difficult. Using PIX I can see that there is a drop in frame rate when the jittering occurs. It’s not a constant jitter it’s like a frame or 2 are randomly taking longer to render. Right afterwards there is a jump in frame rate according to PIX but since I lock my FPS to 60 in my render loop I do not notice the upswing.

What is even more peculiar is that I don’t have to render anything to reproduce the issue. Just the camera in the world, no mesh, no sky, etc and when I rotate left or right, randomly the frame rate dips. If I don’t VSync and I don’t lock my FPS down the jittering (lag) is more noticeable. I don’t see an issue moving forward or backwards, only rotating.

I have a damping mechanism in place for my camera movement. I thought it might be the culprit so I removed everything in my camera class except the rotation’s calculations. I’m not at my desk so this is pseudo code:


CameraTarget.X = CameraPosition.X + (radius * Sin(vRadians))
CameraTarget.Y = CameraPosition.Y + (radius * Cos(vRadians)  * Cos(hRadians))
CameraTarget.Z = CameraPosition.Z + (radius * Cos(vRadians) * Sin(hRadians))

CameraUp.X = CameraPosition.X – CameraTarget.X
CameraUp.Y = ABS(CameraPosition.Y + (radius * Sin(vRadians + PI / 2)))
CameraUp.Z = CameraPosition.Z – CameraTarget.Z


After removing the damping code the issue still remains. It’s also worth noting that in PIX I do not have any memory or thread changes.

Any input would be greatly appreciated.


Dj

Sponsor:

#2 eppo   Crossbones+   -  Reputation: 2621

Like
0Likes
Like

Posted 31 October 2012 - 04:07 AM

Likely the jitters are most obvious when rotating the camera, but not directly caused by the camera itself. They often occur when you're not using a valid enumerated swapchain discription (DXGI_MODE_DESC / FindClosestMatchingMode() etc.). Does the debug runtime/layer give you any warnings on performance penalties?

Edited by eppo, 31 October 2012 - 04:08 AM.


#3 Hodgman   Moderators   -  Reputation: 31826

Like
1Likes
Like

Posted 31 October 2012 - 04:12 AM

How do you get your user-input values in order to rotate the camera? Is it possible that the user-input code is causing your frame-rate issues?

#4 DJTN   Members   -  Reputation: 207

Like
0Likes
Like

Posted 31 October 2012 - 08:34 AM

you're not using a valid enumerated swapchain discription


@eppo - I'm rendering in window mode in DX9 using Discard as the swapeffect and only the implicit swapchain.



How do you get your user-input values in order to rotate the camera? Is it possible that the user-input code is causing your frame-rate issues?



@Hodgman - I think you're on to something here. The movement of my camera is additive, meaning the end user can constantly pass data in. My render loop bails for the window's message queue when there are items that need to be processed. This would explain the delay / lag / FR drop.

Any advice Hodg?

#5 Hodgman   Moderators   -  Reputation: 31826

Like
0Likes
Like

Posted 01 November 2012 - 04:38 AM

If it is an input problem, maybe post up your message/update/render loop code, and an overview of how input messages result in camera movement.

#6 mhagain   Crossbones+   -  Reputation: 8278

Like
0Likes
Like

Posted 01 November 2012 - 05:36 AM

Hmmmm - are you using Sleep to control timings anywhere?

It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.


#7 DJTN   Members   -  Reputation: 207

Like
0Likes
Like

Posted 01 November 2012 - 07:12 AM

Thanks for the replies, I’ve since fixed my issue.

My render loop checked for window’s messages and bailed the loop until the message queue was empty and then picked back up again. This normally resulted in one frame being dropped every so often- depending on the end user’s key input. The random jittering (stuttering) resulted from measuring the length of the render inside the loop and not taking the dropped frames for processing the windows messages into consideration when moving objects. Since I’ve added the timestamp to include the time it takes to clear the message queue, I’m able to smooth out the animation so it’s not noticeable.

In most cases the ultimate solution would be to use DirectInput to process peripheral communications. In my situation, DirectInput is not an optimal choice.

Thanks again for everyone’s input.

Cheers,
Dj

Edited by DJTN, 01 November 2012 - 07:13 AM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS