🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

Free Cam to 3rd Cam Help

Started by
3 comments, last by HighCode 4 years, 3 months ago

Hello everyone.

I'm studying opengl and following the tutorials on the learnopengl website (https://learnopengl.com/)

Could someone please help me convert this camera from the learnopengl tutorial, from free camera to third person ?

I've tried to put the values ​​of the object (character), but I can't make the camera rotate around the player. Only the object walks in front of the camera, if I turn to the side, the object turns along, look like FPS camera and the object (character) being the weapon (hahahahahahaha)

The code to walk (keyboard):

void processKeyboard(Camera_Movement direction, float deltaTime)
	{
		frontY = Front.y;//para tirar o freeCamera
		if (cameraStyle == FPS_CAMERA) {
			Front.y = 0;
		}		

		float velocity = MovementSpeed * deltaTime;

		if (direction == FORWARD)
			Position += Front * velocity;
		if (direction == BACKWARD)
			Position -= Front * velocity;
		if (direction == LEFT)
			Position -= Right * velocity;
		if (direction == RIGHT)
			Position += Right * velocity;

		Front.y = frontY;
	}

Mouse event:

void processMouseMovement(float xoffset, float yoffset, GLboolean constrainPitch = true)
	{
		xoffset *= MouseSensitivity;
		yoffset *= MouseSensitivity;

		Yaw += xoffset;
		Pitch += yoffset;

		// Make sure that when pitch is out of bounds, screen doesn't get flipped
		if (constrainPitch)
		{
			if (Pitch > 89.0f)
				Pitch = 89.0f;
			if (Pitch < -89.0f)
				Pitch = -89.0f;
		}

		// Update Front, Right and Up Vectors using the updated Euler angles
		updateCameraVectors();
	}

Update all:

void updateCameraVectors()
	{
		// Calculate the new Front vector
		glm::vec3 front;
		front.x = cos(glm::radians(Yaw)) * cos(glm::radians(Pitch));
		front.y = sin(glm::radians(Pitch));
		front.z = sin(glm::radians(Yaw)) * cos(glm::radians(Pitch));
		Front = glm::normalize(front);
		// Also re-calculate the Right and Up vector
		Right = glm::normalize(glm::cross(Front, WorldUp));  // Normalize the vectors, because their length gets closer to 0 the more you look up or down which results in slower movement.
		Up = glm::normalize(glm::cross(Right, Front));
	}

And to use:

glm::lookAt(Position, Position + Front, Up)

The complete code:

https://learnopengl.com/code_viewer_gh.php?code=includes/learnopengl/camera.h

Can someone help me ?

Thank you ?

Advertisement

Can someone help me?

https://www.swiftless.com/tutorials/opengl/camera3.html

WhiskyAndCode said:

https://www.swiftless.com/tutorials/opengl/camera3.html

I tried this tutorial, but to no avail. :(

This topic is closed to new replies.

Advertisement