   [FIXED] display issues (jumpy visuals)
  i posted this in the opengl thread, but i'm not sure it is going to get any attention there.  i got lots of help, but unfortunately no one is able to give me much insight into how to solve the issue i'm encountering.what is happening is that while i'm moving left and right with the keyboard and using the mouse to rotate the camera the objects i'm looking at appear to jump/vibrate.  i'll post the code so that you can run it yourself and test it.  i would personally really appreciate any insight into what is going on.  it seems to me to be some math error, but i can't find it.//  6/7/06//  Andrew Monshizadeh//  OpenGL 3d engine using glut#include <GL/glut.h>#include <cmath>#include <iostream>#include <stdlib.h>#include <stdio.h>#include <string.h>using namespace std;// window global variablesint WINDOW_WIDTH = 800;int WINDOW_HEIGHT = 600;int windowids[1];  // can be used to store multiple window ids in case there are multiple windowschar title[13] = "test engine";// call back functions to be usedvoid initializecallbacks();void displaycallback();void keyboardcallback(unsigned char key, int x, int y);void passivemotioncallback(int x, int y);void reshapecallback(int w, int h);void timercallback(int time);// setup visual requirmentsvoid initializevisuals();// variables used for movementconst float piover180 = 0.0174532925f;  // pi / 180, for degree to radian transformfloat heading; // direction character is facingfloat xpos; // x-axis position of the playerfloat zpos; // z-axis position of the playerfloat ypos = 0.5; // y-axis position of the playerGLfloatyrot; // y-axis rotationGLfloat lookupdown = 0.0f; // value to look up or downGLfloatz=0.0f;// Depth Into The Screenint mousebasex = WINDOW_WIDTH/2;int mousebasey = WINDOW_HEIGHT/2;int main(int argc, char* argv[]){  glutInit(&argc, argv);  initializevisuals();  initializecallbacks();    glutMainLoop();    return 0;}//----------------------------------------------------------------------------////call back section    ////----------------------------------------------------------------------------//void initializecallbacks(){  // setting up the call back functions  glutDisplayFunc(displaycallback);  // display call back  glutKeyboardFunc(keyboardcallback);  //  keyboard call back  glutPassiveMotionFunc(passivemotioncallback);  // passive mouse motion call back  glutReshapeFunc(reshapecallback); // screen reshape call back  glutTimerFunc(15, timercallback, 0);  // timer call back}void keyboardcallback(unsigned char key, int x, int y){  switch (key)  {    // miscellaneous input    case 27: // 'esc' exit(0); // end the program break;   // movement input    case 'a': xpos -= (float)sin(heading*piover180 + 90.0f*piover180) * 0.05f; zpos -= (float)cos(heading*piover180 + 90.0f*piover180) * 0.05f;break;case 'd': xpos += (float)sin(heading*piover180 + 90.0f*piover180) * 0.05f; zpos += (float)cos(heading*piover180 + 90.0f*piover180) * 0.05f; break;    case 'w': xpos -= (float)sin(heading*piover180) * 0.05f;zpos -= (float)cos(heading*piover180) * 0.05f;break;case 's': xpos += (float)sin(heading*piover180) * 0.05f; zpos += (float)cos(heading*piover180) * 0.05f;  }    int dims[4];  glGetIntegerv(GL_VIEWPORT, dims);    int dx = x - mousebasex;  int dy = y - mousebasey;  mousebasex = x;  mousebasey = y;  //  if (x < 20)//  {//    glutWarpPointer(dims[2]/2, y);//    mousebasex = dims[2]/2;//  }//  if (x > (dims[2]/2 - 20))//  {//    glutWarpPointer(dims[2]/2, y);//    mousebasex = dims[2]/2;//  }    lookupdown += dy * 0.5f;  heading -= dx * 0.5f;  if(heading < 0.0f)    heading = heading + 360.0f;  else if(heading > 360.0f)    heading = heading - 360.0f;  yrot = heading;}void passivemotioncallback(int x, int y){  int dims[4];  glGetIntegerv(GL_VIEWPORT, dims);    int dx = x - mousebasex;  int dy = y - mousebasey;  mousebasex = x;  mousebasey = y;    if (x < 20)  {    glutWarpPointer(dims[2]/2, y);    mousebasex = dims[2]/2;  }  if (x > (dims[2] - 20))  {    glutWarpPointer(dims[2]/2, y);    mousebasex = dims[2]/2;  }    lookupdown += dy * 0.5f;  heading -= dx * 0.5f;  if(heading < 0.0f)    heading = heading + 360.0f;  else if (heading > 360.0f)    heading = heading - 360.0f;  yrot = heading;}void reshapecallback(int w, int h){  glViewport(0, 0, w, h);  glMatrixMode(GL_PROJECTION);// Select The Projection MatrixglLoadIdentity();// Reset The Projection Matrix// Calculate The Aspect Ratio Of The WindowgluPerspective(45.0f,(GLfloat)w/(GLfloat)h,0.1f,100.0f);glMatrixMode(GL_MODELVIEW);// Select The Modelview MatrixglLoadIdentity();// Reset The Modelview Matrix}void timercallback(int time){  glutPostRedisplay();  glutTimerFunc(10, timercallback, 0);}void displaycallback(){  int dims[4];  glGetIntegerv(GL_VIEWPORT, dims);   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);// Clear The Screen And The Depth Buffer  glMatrixMode(GL_MODELVIEW);  glLoadIdentity();// Reset The ViewGLfloat xtrans = -xpos;GLfloat ztrans = -zpos;GLfloat ytrans = 0; // -walkbias-0.25f;GLfloat sceneroty = 360.0f - yrot;  glRotatef(lookupdown,1.0f,0,0);glRotatef(sceneroty,0,1.0f,0);glTranslatef(xtrans, ytrans, ztrans);glBegin(GL_QUADS);glColor3f(0.0f,1.0f,0.0f);// Set The Color To GreenglVertex3f( 0.5f, 0.5f,-0.5f);// Top Right Of The Quad (Top)glVertex3f(-0.5f, 0.5f,-0.5f);// Top Left Of The Quad (Top)glVertex3f(-0.5f, 0.5f, 0.5f);// Bottom Left Of The Quad (Top)glVertex3f( 0.5f, 0.5f, 0.5f);// Bottom Right Of The Quad (Top)glColor3f(1.0f,0.5f,0.0f);// Set The Color To OrangeglVertex3f( 0.5f,-0.5f, 0.5f);// Top Right Of The Quad (Bottom)glVertex3f(-0.5f,-0.5f, 0.5f);// Top Left Of The Quad (Bottom)glVertex3f(-0.5f,-0.5f,-0.5f);// Bottom Left Of The Quad (Bottom)glVertex3f( 0.5f,-0.5f,-0.5f);// Bottom Right Of The Quad (Bottom)glColor3f(1.0f,0.0f,0.0f);// Set The Color To RedglVertex3f( 0.5f, 0.5f, 0.5f);// Top Right Of The Quad (Front)glVertex3f(-0.5f, 0.5f, 0.5f);// Top Left Of The Quad (Front)glVertex3f(-0.5f,-0.5f, 0.5f);// Bottom Left Of The Quad (Front)glVertex3f( 0.5f,-0.5f, 0.5f);// Bottom Right Of The Quad (Front)glColor3f(1.0f,1.0f,0.0f);// Set The Color To YellowglVertex3f( 0.5f,-0.5f,-0.5f);// Bottom Left Of The Quad (Back)glVertex3f(-0.5f,-0.5f,-0.5f);// Bottom Right Of The Quad (Back)glVertex3f(-0.5f, 0.5f,-0.5f);// Top Right Of The Quad (Back)glVertex3f( 0.5f, 0.5f,-0.5f);// Top Left Of The Quad (Back)glColor3f(0.0f,0.0f,1.0f);// Set The Color To BlueglVertex3f(-0.5f, 0.5f, 0.5f);// Top Right Of The Quad (Left)glVertex3f(-0.5f, 0.5f,-0.5f);// Top Left Of The Quad (Left)glVertex3f(-0.5f,-0.5f,-0.5f);// Bottom Left Of The Quad (Left)glVertex3f(-0.5f,-0.5f, 0.5f);// Bottom Right Of The Quad (Left)glColor3f(1.0f,0.0f,1.0f);// Set The Color To VioletglVertex3f( 0.5f, 0.5f,-0.5f);// Top Right Of The Quad (Right)glVertex3f( 0.5f, 0.5f, 0.5f);// Top Left Of The Quad (Right)glVertex3f( 0.5f,-0.5f, 0.5f);// Bottom Left Of The Quad (Right)glVertex3f( 0.5f,-0.5f,-0.5f);// Bottom Right Of The Quad (Right)glEnd();// Done Drawing The QuadglFlush();glutSwapBuffers();}void initializevisuals(){  // creating the window and drawing buffers    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH); // create double buffer and z-depth buffer  glutInitWindowSize(WINDOW_WIDTH, WINDOW_HEIGHT); // create window using predetermined window sizes  glutInitWindowPosition(0,0);  windowids[0]=glutCreateWindow(title);  glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // set background color to whiteglClearDepth(1.0); // enables clearing of the depth buffer  glEnable(GL_DEPTH_TEST); // enable depth testingglDepthFunc(GL_LESS);// the type of depth test to doglHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);// really nice perspective calculations, got from NeHe tutorial 10  int dims[4];  glGetIntegerv(GL_VIEWPORT, dims);glMatrixMode(GL_PROJECTION);// Select The Projection MatrixglLoadIdentity();// Reset The Projection Matrix// Calculate The Aspect Ratio Of The WindowgluPerspective(45.0f,(GLfloat)dims[2]/(GLfloat)dims[3],0.1f,100.0f);glMatrixMode(GL_MODELVIEW);// Select The Modelview MatrixglLoadIdentity();// Reset The Modelview Matrix}any comments y'all have would be much appreciated.i took much of the movement code from the nehe tutorial #10.thanks![Edited by - supercat1 on June 10, 2006 12:21:39 PM]
  Don't know what you mean, maybe your pc is too weak, so you're getting low fps :)?   ;  sorry, forgot to update this thread, but infact the issue has been solved.  it came down to the fact that i had to disable keyboard repeats.  turns out that because glut was polling the keyboard every cycle/interation through glutMainLoop() it was causing the stutter.  so, when i took out the keyrepeat and implemented a method that allowed for delay-less input the whole problem disappeared.and to think, i had a solution to the input delay for about 2 days before implementing it because i thought it was a minor issue.  geesh.  (insert rolling eye smiley here ...):D   