【问题标题】:Opengl Camera rotation around XOpengl相机绕X旋转
【发布时间】:2022-01-01 21:04:06
【问题描述】:
在 Visual Studio 中处理 opengl 项目。我正在尝试围绕 X 和 Y 轴旋转相机。
Thats the math i should use
我遇到了麻烦,因为我使用 glm::lookAt 作为相机位置,它需要 glm::vec3 作为参数。
有人可以解释我如何在 opengl 中实现它吗?
PS:我不能使用四元数
【问题讨论】:
-
您可以在 c++ 或 glsl 中实现一种算法来计算旋转矩阵,但在 OpenGL 中则不行。计算旋转矩阵(glm-math,c++)并在着色器中设置一个Uniform变量。
-
标签:
c++
opengl
camera
rotation
glm-math
【解决方案1】:
lookAt 函数应该接受三个输入:
vec3 cameraPosition
vec3 cameraLookAt
vec3 cameraUp
根据我过去的经验,如果要移动相机,首先找到运动的变换矩阵,然后将矩阵应用到这三个向量上,结果将是三个新的vec3,它们是你新输入到查看函数。
vec3 newCameraPosition = movementMat4 * cameraPosition
//Same for other two
另一种方法可能是找到您希望相机执行的反向移动并将其应用于整个场景。由于移动相机有点等于在保持相机不动的同时将对象移动到反向运动:)
【解决方案2】:
下面的相机是围绕z轴旋转的。
const float radius = 10.0f;
float camX = sin(time) * radius;
float camZ = cos(time) * radius;
glm::vec3 cameraPos = glm::vec3(camX, 0.0, camZ);
glm::vec3 objectPos = glm::vec3(0.0, 0.0, 0.0);
glm::vec3 up = glm::vec3(0.0, 1.0, 0.0);
glm::mat4 view = glm::lookAt(cameraPos, objectPos, up);
查看https://learnopengl.com/,这是一个学习的好网站!