第七课,OpenGL之glfw回调函数

常用回调函数

按键输入(修饰符也可触发)

GLFWkeyfun 	glfwSetKeyCallback (GLFWwindow *window, GLFWkeyfun callback)
void function_name(GLFWwindow* window, int key, int scancode, int action, int mods)

字符输入

GLFWcharfun 	glfwSetCharCallback (GLFWwindow *window, GLFWcharfun callback)
void function_name(GLFWwindow* window, unsigned int codepoint)

组合键输入,字符也可触发,但修饰符不触发。

GLFWcharmodsfun 	glfwSetCharModsCallback (GLFWwindow *window, GLFWcharmodsfun callback)
void function_name(GLFWwindow* window, unsigned int codepoint, int mods)

codepoint是按下的键的unicode码,mods是按下的修饰符。

鼠标按键触发

GLFWmousebuttonfun 	glfwSetMouseButtonCallback (GLFWwindow *window, GLFWmousebuttonfun callback)
void function_name(GLFWwindow* window, int button, int action, int mods)

光标移动触发

GLFWcursorposfun 	glfwSetCursorPosCallback (GLFWwindow *window, GLFWcursorposfun callback)
void function_name(GLFWwindow* window, double xpos, double ypos);

光标进入(离开)触发

GLFWcursorenterfun 	glfwSetCursorEnterCallback (GLFWwindow *window, GLFWcursorenterfun callback)
void function_name(GLFWwindow* window, int entered)

[in] entered GLFW_TRUE if the cursor entered the window’s content
area, or GLFW_FALSE if it left it.

鼠标滚轮触发

GLFWscrollfun 	glfwSetScrollCallback (GLFWwindow *window, GLFWscrollfun callback)
void function_name(GLFWwindow* window, double xoffset, double yoffset)

常用获取按键函数

int 	glfwGetKey (GLFWwindow *window, int key)
 
int 	glfwGetMouseButton (GLFWwindow *window, int button)
 
void 	glfwGetCursorPos (GLFWwindow *window, double *xpos, double *ypos)

void 	glfwSetCursorPos (GLFWwindow *window, double xpos, double ypos)

具体使用

if (glfwGetKey(window,GLFW_KEY_M) == GLFW_PRESS) {
        float currentFrame = glfwGetTime();
        deltaTime = currentFrame - lastFrame;
        lastFrame = currentFrame;
        float cameraSpeed = 0.5f * deltaTime;
        if (glfwGetKey(window, GLFW_KEY_UP) == GLFW_PRESS) {
            maincamera.moveUpDownward(cameraSpeed);//上正
        }
        if (glfwGetKey(window, GLFW_KEY_DOWN) == GLFW_PRESS) {
            maincamera.moveUpDownward(-cameraSpeed);//下负
        }
        if (glfwGetKey(window, GLFW_KEY_LEFT) == GLFW_PRESS) {
            maincamera.moveLRward(cameraSpeed);//左正
        }
        if (glfwGetKey(window, GLFW_KEY_RIGHT) == GLFW_PRESS) {
            maincamera.moveLRward(-cameraSpeed);//右负
        }
            
        if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_PRESS) {
            glfwGetCursorPos(window, &xpos, &ypos);
            if (lastXpos == 0.0f && lastYpos == 0.0f) {
                lastXpos = xpos;
                lastYpos = ypos;
            }
            else {
                double xoffset = lastXpos - xpos;
                double yoffset = lastYpos - ypos;
                lastXpos = xpos;
                lastYpos = ypos;
                double sensitivity = 0.02;
                xoffset *= sensitivity;
                yoffset *= sensitivity;
                maincamera.moveUpDownward(yoffset);
                maincamera.moveLRward(xoffset);
            }
        }
        if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_PRESS){
            //~~~~~
        }
        if (glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_RIGHT) == GLFW_RELEASE && \\
            glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_LEFT) == GLFW_RELEASE) {
            lastXpos = 0.0f;
            lastYpos = 0.0f;
        }
    }

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片