Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 眼球照相机OpenGL_C++_Opengl_Trigonometry - Fatal编程技术网

C++ 眼球照相机OpenGL

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

我目前正在尝试在OpenGL中创建眼球视图摄影机

如果我没记错的话,眼球相机是一种可以绕着一个物体移动的相机,但不用欧拉角。所以它只是一个围绕一个点旋转的摄像机

我想知道我怎么能只用Trigo来做这件事。现在,我有一个奇怪的相机根本不工作

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坐标。听起来你想要一个经典的“轨迹球”或“弧球”实现,使用四元数。你无法用“一个可以绕着物体移动但不使用欧拉角的相机”来描述你想要做什么。通过说它不使用某个特定的数学工具来定义,并不能说明您希望它做什么