第七课,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;
        }
    }
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Elsa的迷弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值