Original Post
hi, im trying to use camera functions like goLeft and goRight using GLUT and GLU. so this is my code: in main():
void keyboard(unsigned char key,int x,int y)
{
switch (key)
{
case 'w':
cam.goUp(1);
glutPostRedisplay();
break;
case 'a':
cam.goLeft(1);
glutPostRedisplay();
break;
case 'd':
cam.goRight(1);
glutPostRedisplay();
break;
case 's':
cam.goDown(1);
glutPostRedisplay();
break;
default:
break;
};
} in Camera class: void Camera::updateCamera()
{
float px = m_vPos.x;
float py = m_vPos.y;
float pz = m_vPos.z;
float lx = m_vLookat.x;
float ly = m_vLookat.y;
float lz = m_vLookat.z;
gluLookAt(px,py,pz,lx,ly,lz,0,1,0);
};
/* Bla Bla Bla... */
void Camera::goUp(float fUnits)
{
if (fUnits < 0.0f)
fUnits += fUnits*-2;
m_vPos.y = fUnits+m_vLookat.y;
updateCamera();
};
void Camera::goDown(float fUnits)
{
if (fUnits > 0.0f)
fUnits -= fUnits*2;
m_vPos.y = fUnits-m_vLookat.y;
updateCamera();
};
void Camera::goRight(float fUnits)
{
if (fUnits < 0.0f)
fUnits += fUnits*-2;
m_vPos.x = fUnits+m_vLookat.x;
if (m_bWalking)
{
if (m_bUp)
m_vPos.y += 1.0f;
else
m_vPos.y -= 1.0f;
};
updateCamera();
};
void Camera::goLeft(float fUnits)
{
if (fUnits > 0.0f)
fUnits -= fUnits*2;
m_vPos.x = fUnits-m_vLookat.x;
if (m_bWalking)
{
if (m_bUp)
m_vPos.y += 1.0f;
else
m_vPos.y -= 1.0f;
};
updateCamera();
};
m_bWalking is set to false in the Camera initialization. camera position begins at 0,0,6 in direction 0,0,0 but when i run the program, it seems like every time i call a Camera function, it also goes backward and maybe roll itself (the camera). what am i doing wrong, how to fix it? thanks, pex.