C++ 在opengl中翻译相机时遇到问题

C++ 在opengl中翻译相机时遇到问题,c++,opengl,glm-math,C++,Opengl,Glm Math,我很难理解摄像机的翻译。我已经可以成功地旋转相机了,但我仍然对平移相机感到困惑。我包含了关于如何旋转相机的代码,因为平移和旋转需要使用lookat函数。家庭作业说,翻译相机意味着眼睛和中心的移动量应该相同。我知道我可以更改lookat函数中的参数来实现这一点 lookat函数的定义如下: Lookat(cameraPos, center, up) glm::vec3 cameraPos=glm::vec3(0.0f,0.0f,10.0f); glm::vec3中心(0.0f,0.0f,0.0f

我很难理解摄像机的翻译。我已经可以成功地旋转相机了,但我仍然对平移相机感到困惑。我包含了关于如何旋转相机的代码,因为平移和旋转需要使用lookat函数。家庭作业说,翻译相机意味着眼睛和中心的移动量应该相同。我知道我可以更改lookat函数中的参数来实现这一点

lookat函数的定义如下:

Lookat(cameraPos, center, up)
glm::vec3 cameraPos=glm::vec3(0.0f,0.0f,10.0f);
glm::vec3中心(0.0f,0.0f,0.0f);
glm::vec3 cameraUp=glm::vec3(0.0f,1.0f,0.0f);
modelViewProjectionMatrix.Perspective(glm::弧度(fov)、浮动(宽度)/浮动(高度)、0.1f、100.0f);
modelViewProjectionMatrix.LookAt(cameraPos,center,cameraUp);
void CursorPositionCallback(GLFWwindow*lWindow,双xpos,双ypos)
{
int state=glfwGetMouseButton(窗口,GLFW_鼠标左键);
如果(状态==GLFW_按)
{
如果(第一个鼠标)
{
lastX=xpos;
lastY=ypos;
firstMouse=false;
}
float xoffset=xpos-lastX;
浮动yoffset=lastY-ypos;
lastX=xpos;
lastY=ypos;
偏航+=xoffset;
音高+=音高偏移;
glm::vec3锋;
x=中心[0]+5.0f*cos(glm::弧度(偏航))*cos(glm::弧度(俯仰));
前端y=中心[1]+5.0f*sin(glm::弧度(节距));
前端z=中心[1]+5.0f*sin(glm::弧度(偏航))*cos(glm::弧度(俯仰));
cameraPos=正面;
}
}

如果要将相机平移偏移量,则必须向相机位置(
cameraPos
)和相机目标(
center
)添加相同的矢量(
glm::vec3 offset
):

中心=中心+偏移;
cameraPos=cameraPos+偏移量;
当您通过
俯仰
偏航
角度计算相机的新目标(
中心
)时,您还必须更新相机的上方向向量(
cameraUp
):

glm::vec3前端(
cos(glm::弧度(俯仰))*cos(glm::弧度(偏航)),
sin(glm::弧度(节距)),
cos(glm::弧度(俯仰))*sin(glm::弧度(偏航))
);
glm::vec3 up(
-sin(glm::弧度(俯仰))*cos(glm::弧度(偏航)),
cos(glm::弧度(螺距)),
-sin(glm::弧度(俯仰))*sin(glm::弧度(偏航))
);
cameraPos=中心+前部*5.0f;
cameraUp=向上;
要在视图空间中沿x轴(从左到右)平移相机,必须通过向量到目标(
front
)和上方向向量(
cameraUp
up
)计算向右的向量:

glm::vec3 right=glm::cross(前面,上面);
视图空间中的y轴(从下到上)是上方向向量

要转换标量(
float trans\u x
)和(
trans\u y
),必须将缩放的
向上
矢量添加到相机位置(
cameraPos
)和相机目标(
中心
):

center=center+right*trans\u x+up*trans\u y;
cameraPos=cameraPos+右*横x+上*横y;
使用操纵向量设置视图矩阵:

modelViewProjectionMatrix.LookAt(cameraPos,center,cameraUp);

您的代码似乎已经在围绕中心的球体上重新定位了
cameraPos
,因此不足以将您的位移添加到
中心
?感谢您的建议!我现在明白了。非常感谢!!这正是我需要的。你的回答甚至比我的助教提供的解释更重要。