OpenGL在2个键上旋转相机

时间:2016-03-28 02:11:26

标签: glfw opengl-4

基本上我要做的是当我按住“c”并使用箭头键时,围绕中心的物体旋转相机。

我的第一个问题与相机没什么关系,但是有一个键回调可以同时识别2个键。

如果我有L / R键的单独if语句而没有“c”,我的功能是否正常工作,但是当我只想让相机旋转时我不能让它工作“c” 。我尝试在if语句中使用switch(key)和if语句。我尝试过的两种实现都在下面的代码中:

float R = 0.0;
float U = 0.0;

static void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if(key == GLFW_KEY_C && action == GLFW_PRESS) {

        switch(key) {
            case GLFW_KEY_RIGHT:
                R+=0.05;
                camera(R, U);
                break;
            case GLFW_KEY_LEFT:
                R-=0.05;
                camera(R, U);
                break;
            case GLFW_KEY_UP:
                break;
            case GLFW_KEY_DOWN:
                break;
            default:
                break;
        }
    }
    //OR --
    if(key == GLFW_KEY_C && action == GLFW_PRESS) {
        if(key == GLFW_KEY_RIGHT && action == GLFW_PRESS) {
            R+=0.05;
            camera(R, U);
        }   
    }

}

我做错了什么?还有什么我可以尝试的吗?

我的第二个问题与相机有关。它使用我当前的代码在对象周围旋转半圈,但是一旦到达某个点,摄像机就会越远离对象,而不是旋转。 这是我的相机功能的代码:

GLfloat ox = 10.0;
GLfloat oy = 10.0;    
static void camera(float RL, float UD) {
        ox+=cos(glm::radians(RL));
        oy+=sin(glm::radians(RL));


        gViewMatrix = glm::lookAt(glm::vec3(ox, oy, 10.0f), // eye
            glm::vec3(0.0, 0.0, 0.0),   // center
            glm::vec3(0.0, 1.0, 0.0));

    }

1 个答案:

答案 0 :(得分:1)

你的'C'检测代码不起作用,因为你只在匹配等于C和箭头时匹配。它不可能两者兼而有之。你必须保留另一个全局变量isCPressed。当按下C时你将它设置为true,当C被释放时你将它设置为false,然后当按下箭头时你检查是否(isCPressed)。

对于摄像机代码,您的算法在观察0,0,0时绕点0,0,10运行。这似乎不是你想要的,你应该有像牛 dist,oy dist,0这样的眼睛位置在距离'dist'的轨道上0,0,0