Hi All,
I’ve implemented a first-person camera using OpenGL and GLM, however I’m having some issues with translation along the x-axis. When I press A for example (expecting to go to the left) the camera goes to the right, vice versa for D and going right.
Here’s the camera setup code, spawn position and look vector, so we start off looking down the positive Z axis, which should be into the screen (I’m using left-handed coordinates here):
gCamera.Setup( glm::vec3( 15.5f, 0.4f, 6.8f ), glm::vec3( 0.f, 0.f, 1.f ) );
Some setup in the camera constructor:
mPos = pos;
mForward = forward;
mUp = glm::vec3( 0.f, 1.f, 0.f );
mRight = glm::cross( mUp, mForward );
Then the translation code from the game:
if( mKeyboard.IsKeyDown( KEYBOARD::A ) )
gGameEvents.push( PlayerMovedEvent( glm::vec3( -0.001f, 0.f, 0.f ) ) );
if( mKeyboard.IsKeyDown( KEYBOARD::D ) )
gGameEvents.push( PlayerMovedEvent( glm::vec3( 0.001f, 0.f, 0.f ) ) );
Finally, the translation code from the camera class:
void FirstPersonCamera::Translate( float x, float y, float z ) {
glm::vec3 translation( x, y, z );
translation = glm::mat3( glm::rotate( mYaw, glm::vec3( 0.f,1.f,0.f ) ) ) * translation;
translation = glm::mat3( glm::rotate( mPitch, mRight ) ) * translation;
mPos += translation;
}
I’d really appreciate some help with this.
Thanks