C++ 在OpenGL中实现可平移的相机
我想知道你将如何实现一个可以在OpenGL中平移的相机。这是我当前的代码和基本想法:C++ 在OpenGL中实现可平移的相机,c++,opengl,glm,C++,Opengl,Glm,我想知道你将如何实现一个可以在OpenGL中平移的相机。这是我当前的代码和基本想法: mouseSlope.first = mousePressedPos.first - xpos; mouseSlope.second = mousePressedPos.second - ypos; float d, z; d = (glm::dot(cameraFront, (-cameraRight))); if (came
mouseSlope.first = mousePressedPos.first - xpos;
mouseSlope.second = mousePressedPos.second - ypos;
float d, z;
d = (glm::dot(cameraFront, (-cameraRight)));
if (cameraFront.y != 0.0f) {
z = (d + (mouseSlope.first * cameraFront.x + mouseSlope.second * cameraFront.y)) / -cameraFront.y;
}
else{
z = (d + (mouseSlope.first * cameraFront.x + mouseSlope.second * cameraFront.y));
}
glm::vec3 translation(mouseSlope.first, mouseSlope.second, z);
cameraPos -= 0.05f * glm::normalize(translation);
glm::vec3 direction;
direction.x = cos(glm::radians(yaw)) * cos(glm::radians(pitch));
direction.y = sin(pitch);
direction.z = sin(glm::radians(yaw)) * cos(glm::radians(pitch));
cameraFront = glm::normalize(direction);
cameraRight = glm::cross(cameraFront, worldUp);
cameraUp = glm::cross(cameraFront, cameraRight);
在这段代码中,每当按下平移按钮时,我都会选择鼠标位置,并用当前鼠标位置减去鼠标位置。这将为我提供当前鼠标位置和按下平移按钮时鼠标位置之间的x和y坐标。从那里,我找到了平面方程,在右向量的方向上与相机相交,使用相机的右向量和正交前向量。然后,使用之前计算的x和y坐标,我可以计算新平移必须到达的z位置,并从那里构造和实现它。问题是,glm平移向量在某一点会变成-nan(ind)。我是朝着正确的方向走,还是有一种更有效、更优化的方法
旁注:
我最终打电话给:
glm::lookAt(cameraPos, cameraPos + cameraFront, cameraUp);
在我的代码中的其他地方。这是旋转相机的常用方法,但大多数应用程序都使用表示旋转的四元数。四元数``取一个带有欧拉角的向量并表示它<代码>四元数也不能有万向节锁,但您的代码包括平移。平移意味着什么?平移意味着在使用平面方程计算出所有x、y、z值后,将相机移动到所需位置。