I've recently tried to add some movement functions to my camera, all good so far, apart from in my "MoveCamera.cpp" class, one of my functions is breaking and returning a very weird error.
http://img89.imageshack.us/img89/9585/errorva.png
For the life of me I can't figure out why.
Here is where it is being called, in my graphics class
Graphics.cpp
/* Handle Input handles are user input via the keyboard */
bool Graphics::HandleInput(float frameTime)
{
bool keyDown;
float posX, posY, posZ;
float rotX, rotY, rotZ;
//Set the frame time used for updating positions
movecamera->SetFrameTime(frameTime);
And here is my MoveCamera class, including the header file
MoveCamera.h
//--------------------------------------------------\\
// MoveCamera.h - Allows the camera to move \\
// \\
//--------------------------------------------------\\
#ifndef _MOVECAMERA_H
#define _MOVECAMERA_H
#include <math.h>
class MoveCamera
{
public:
MoveCamera();
~MoveCamera();
void SetPos(float, float, float);
void SetRot(float, float, float);
void GetPos(float&, float&, float&);
void GetRot(float&, float&, float&);
void SetFrameTime(float); //Keep the camera in sync with the application
/* Movement Keys */
void MoveForward(bool); //W
void MoveBackwards(bool); //S
void MoveUp(bool); //Q
void MoveDown(bool); //E
/* Rotation keys */
void TurnLeft(bool); //A
void TurnRight(bool); //D
void LookUp(bool); //Up Arrow
void LookDown(bool); //Down Arrow
private:
float posX, posY, posZ;
float rotX, rotY, rotZ;
float frameTime;
float forwardSpeed; //W
float backwardSpeed; //S
float upwardSpeed; //Q
float downwardSpeed; //E
float LookLeftSpeed; //A
float LookRightSpeed; //D
float LookDownSpeed; //Up Arrow
float LookUpSpeed; //Down Arrow
};
#endif
MoveCamera.cpp
//--------------------------------------------------\\
// MoveCamera.cpp - Allows the camera to move \\
// \\
//--------------------------------------------------\\
#include "MoveCamera.h"
/* Constructor & Deconstructor */
MoveCamera::MoveCamera()
{
posX = 0.0f;
posY = 0.0f;
posZ = 0.0f;
rotX = 0.0f;
rotY = 0.0f;
rotZ = 0.0f;
frameTime = 0.0f;
forwardSpeed = 0.0f;
backwardSpeed = 0.0f;
upwardSpeed = 0.0f;
downwardSpeed = 0.0f;
LookLeftSpeed = 0.0f;
LookRightSpeed = 0.0f;
LookDownSpeed = 0.0f;
LookUpSpeed = 0.0f;
}
MoveCamera::~MoveCamera(){}
/* Set the camera Position */
void MoveCamera::SetPos(float x, float y, float z)
{
posX = x;
posY = y;
posZ = z;
return;
}
/* Set the camera Rotation */
void MoveCamera::SetRot(float x, float y, float z)
{
rotX = x;
rotY = y;
rotZ = z;
return;
}
/* Get the camera Position */
void MoveCamera::GetPos(float& x, float& y, float& z)
{
x = posX;
y = posY;
z = posZ;
return;
}
/* Get the camera Rotation */
void MoveCamera::GetRot(float& x, float& y, float& z)
{
x = rotX;
y = rotY;
z = rotZ;
return;
}
/* Set Frame Time to sync camera movement to FPS */
void MoveCamera::SetFrameTime(float time)
{
frameTime = time;
return;
}
/*
The functions here use simple math to give the movement a realistic acceleration.
The speed of each direction is added to the frameTime to sync is probably.
Maths adopted from the Rastertek.com tutorials.
*/
/* Move Forward */
void MoveCamera::MoveForward(bool keydown)
{
float rads;
if(keydown)
{
forwardSpeed += frameTime * 0.001f;
if(forwardSpeed > (frameTime * 0.03f))
{forwardSpeed = frameTime * 0.03f;}
}
else
{
forwardSpeed -= frameTime * 0.0007f;
if(forwardSpeed < 0.0f)
{forwardSpeed = 0.0f;}
}
//Update new position
rads = rotY * 0.0174532925f;
posX += sinf(rads) * forwardSpeed;
posZ += cosf(rads) * forwardSpeed;
return;
}
/* Move Backwards */
void MoveCamera::MoveBackwards(bool keydown)
{
float rads;
if(keydown)
{
backwardSpeed += frameTime * 0.001f;
if(backwardSpeed > (frameTime * 0.03f))
{backwardSpeed = frameTime * 0.03f;}
}
else
{
backwardSpeed -= frameTime * 0.0007f;
if(backwardSpeed < 0.0f)
{backwardSpeed = 0.0f;}
}
//Update new position
rads = rotY * 0.0174532925f;
posX -= sinf(rads) * backwardSpeed;
posZ -= cosf(rads) * backwardSpeed;
return;
}
/* Move Upwards */
void MoveCamera::MoveUp(bool keydown)
{
if(keydown)
{
upwardSpeed += frameTime * 0.003f;
if(upwardSpeed > (frameTime * 0.03f))
{upwardSpeed = frameTime * 0.03f;}
}
else
{
upwardSpeed -= frameTime * 0.002f;
if(upwardSpeed < 0.0f)
{upwardSpeed = 0.0f;}
}
//Update new position
posY += upwardSpeed;
return;
}
/* Move Downwards */
void MoveCamera::MoveDown(bool keydown)
{
if(keydown)
{
downwardSpeed += frameTime * 0.003f;
if(downwardSpeed > (frameTime * 0.03f))
{downwardSpeed = frameTime * 0.03f;}
}
else
{
downwardSpeed -= frameTime * 0.002f;
if(downwardSpeed < 0.0f)
{downwardSpeed = 0.0f;}
}
//Update new position
posY -= downwardSpeed;
return;
}
/* Rotate Left */
void MoveCamera::TurnLeft(bool keydown)
{
if(keydown)
{
LookLeftSpeed += frameTime * 0.01f;
if(LookLeftSpeed > (frameTime * 0.15f))
{LookLeftSpeed = frameTime * 0.15f;}
}
else
{
LookLeftSpeed -= frameTime * 0.005f;
if(LookLeftSpeed < 0.0f)
{LookLeftSpeed = 0.0f;}
}
//Update new position
rotY -= LookLeftSpeed;
//Keep the value of rotY between 0-360
if(rotY < 0.0f)
{rotY += 360.0f;}
return;
}
/* Rotate Right */
void MoveCamera::TurnRight(bool keydown)
{
if(keydown)
{
LookRightSpeed += frameTime * 0.01f;
if(LookRightSpeed > (frameTime * 0.15f))
{LookRightSpeed = frameTime * 0.15f;}
}
else
{
LookRightSpeed -= frameTime* 0.005f;
if(LookRightSpeed < 0.0f)
{LookRightSpeed = 0.0f;}
}
//Update new position
rotY += LookRightSpeed;
//Keep the value of rotY between 0-360
if(rotY > 360.0f)
{rotY -= 360.0f;}
return;
}
/* Rotate Down */
void MoveCamera::LookDown(bool keydown)
{
if(keydown)
{
LookDownSpeed += frameTime * 0.01f;
if(LookDownSpeed > (frameTime * 0.15f))
{LookDownSpeed = frameTime * 0.15f;}
}
else
{
LookDownSpeed -= frameTime* 0.005f;
if(LookDownSpeed < 0.0f)
{LookDownSpeed = 0.0f;}
}
//Update the position
rotX += LookDownSpeed;
//Keep the rotation maximum 90 degrees
if(rotX < -90.0f)
{rotX = -90.0f;}
return;
}
/* Rotate Up */
void MoveCamera::LookUp(bool keydown)
{
if(keydown)
{
LookUpSpeed += frameTime * 0.01f;
if(LookUpSpeed > (frameTime * 0.15f))
{LookUpSpeed = frameTime * 0.15f;}
}
else
{
LookUpSpeed -= frameTime* 0.005f;
if(LookUpSpeed < 0.0f)
{LookUpSpeed = 0.0f;}
}
//Update the position
rotX -= LookUpSpeed;
//Keep the rotation maximum 90 degrees
if(rotX > 90.0f)
{rotX = 90.0f;}
return;
}
Could anyone shine some light on this situation? Thanks