Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- glm::dmat4 LookAt(const glm::vec3& pos, const glm::vec3& look, const glm::vec3& up) {
- glm::dmat4 cameraToWorld;
- // Initialize fourth column of viewing matrix
- cameraToWorld[0][3] = pos.x;
- cameraToWorld[1][3] = pos.y;
- cameraToWorld[2][3] = pos.z;
- cameraToWorld[3][3] = 1;
- glm::vec3 dir = glm::normalize(look - pos);
- glm::vec3 left = glm::normalize(glm::cross(glm::normalize(up), dir));
- glm::vec3 newUp = glm::cross(dir, left);
- cameraToWorld[0][0] = left.x;
- cameraToWorld[1][0] = left.y;
- cameraToWorld[2][0] = left.z;
- cameraToWorld[3][0] = 0.;
- cameraToWorld[0][1] = newUp.x;
- cameraToWorld[1][1] = newUp.y;
- cameraToWorld[2][1] = newUp.z;
- cameraToWorld[3][1] = 0.;
- cameraToWorld[0][2] = dir.x;
- cameraToWorld[1][2] = dir.y;
- cameraToWorld[2][2] = dir.z;
- cameraToWorld[3][2] = 0.;
- return glm::inverse(cameraToWorld);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement