I try to make a camera that can walk on X/Z plane and rotate 360 degrees. I’ve looked at tutorials but I can’t understand them. Most of them use trigonometric functions, like the one below:
// horizontal angle : toward -Z
float horizontalAngle = 3.14f;
// vertical angle : 0, look at the horizon
float verticalAngle = 0.0f;
int xpos, ypos;
glfwGetMousePos(&xpos, &ypos);
glfwSetMousePos(1024/2, 768/2);
horizontalAngle += mouseSpeed * deltaTime * float(1024/2 - xpos );
verticalAngle += mouseSpeed * deltaTime * float( 768/2 - ypos );
glm::vec3 direction(
cos(verticalAngle) * sin(horizontalAngle),
sin(verticalAngle),
cos(verticalAngle) * cos(horizontalAngle)
);
glm::vec3 right = glm::vec3(
sin(horizontalAngle - 3.14f/2.0f),
0,
cos(horizontalAngle - 3.14f/2.0f)
);
glm::vec3 up = glm::cross( right, direction );
ViewMatrix = glm::lookAt(
position, // Camera is here
position+direction, // and looks here : at the same position, plus “direction”
up // Head is up (set to 0,-1,0 to look upside-down)
);
Why is trigonometry used in the code,how do I create a camera that can freely walk and look around?