C++ 眼球照相机OpenGL
我目前正在尝试在OpenGL中创建眼球视图摄影机 如果我没记错的话,眼球相机是一种可以绕着一个物体移动的相机,但不用欧拉角。所以它只是一个围绕一个点旋转的摄像机 我想知道我怎么能只用Trigo来做这件事。现在,我有一个奇怪的相机根本不工作C++ 眼球照相机OpenGL,c++,opengl,trigonometry,C++,Opengl,Trigonometry,我目前正在尝试在OpenGL中创建眼球视图摄影机 如果我没记错的话,眼球相机是一种可以绕着一个物体移动的相机,但不用欧拉角。所以它只是一个围绕一个点旋转的摄像机 我想知道我怎么能只用Trigo来做这件事。现在,我有一个奇怪的相机根本不工作 int t_Camera::CameraMouvement() { if (sf::Keyboard::isKeyPressed(sf::Keyboard::A)) { m_ValueToRotate.x = m_ValueTo
int t_Camera::CameraMouvement()
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
m_ValueToRotate.x = m_ValueToRotate.x - 0.1;
m_ValueToRotate.z = m_ValueToRotate.z - 0.1;
m_Mouvement = 1;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
m_ValueToRotate.x = m_ValueToRotate.x + 0.1;
m_ValueToRotate.z = m_ValueToRotate.z + 0.1;
m_Mouvement = 1;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
m_ValueToRotate.y = m_ValueToRotate.y + 0.1;
m_ValueToRotate.z = m_ValueToRotate.z + 0.1;
m_Mouvement = 1;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
m_ValueToRotate.y = m_ValueToRotate.y - 0.1;
m_ValueToRotate.z = m_ValueToRotate.z - 0.1;
m_Mouvement = 1;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
{
m_ValueToScale.x = m_ValueToScale.x + 0.1;
m_ValueToScale.y = m_ValueToScale.y + 0.1;
m_ValueToScale.y = m_ValueToScale.y + 0.1;
m_Mouvement = 1;
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::LShift))
{
m_ValueToScale.x = m_ValueToScale.x - 0.1;
m_ValueToScale.y = m_ValueToScale.y - 0.1;
m_ValueToScale.x = m_ValueToScale.x - 0.1;
m_Mouvement = 1;
}
return m_Mouvement;
}
void t_Math::CreateLookAt(glm::mat4& InMatrix, sf::Vector3f& pointToFix, sf::Vector3f& valueToRotate, sf::Vector3f& valueToScale)
{
InMatrix = glm::mat4(1.0);
const glm::vec3 constObjetMiddle = glm::vec3(pointToFix.x, pointToFix.y, pointToFix.z);
const GLfloat x_Point = cos(valueToRotate.x * (valueToScale.x*10)) * sin(valueToRotate.z * (valueToScale.z*10));
const GLfloat y_Point = cos(valueToRotate.y * (valueToScale.y*10)) * sin(valueToRotate.z * (valueToScale.z*10));
const GLfloat z_Point = cos(valueToRotate.y * (valueToScale.y*10)) * sin(valueToRotate.x * (valueToScale.x*10));
InMatrix = glm::lookAt(glm::vec3(x_Point, y_Point, z_Point), constObjetMiddle, glm::vec3(0.0, 1.0, 0.0));
}
我的目标是,通过按下控制按钮(W-A-S-D),您可以控制围绕objet的旋转,通过使用空格和Shift,您可以控制objet上的缩放
非常感谢:)您希望该代码具体做什么?我希望它使用LookAt GLM函数创建眼球摄像头。通过这一点,我尝试使用Sin和Cos来计算相机的3D坐标。听起来你想要一个经典的“轨迹球”或“弧球”实现,使用四元数。你无法用“一个可以绕着物体移动但不使用欧拉角的相机”来描述你想要做什么。通过说它不使用一个特定的数学工具来定义,并不表示您希望它做什么。您希望该代码具体做什么?我希望它使用LookAt GLM函数创建一个眼球相机。通过这一点,我尝试使用Sin和Cos来计算相机的3D坐标。听起来你想要一个经典的“轨迹球”或“弧球”实现,使用四元数。你无法用“一个可以绕着物体移动但不使用欧拉角的相机”来描述你想要做什么。通过说它不使用某个特定的数学工具来定义,并不能说明您希望它做什么