常用回调函数
按键输入(修饰符也可触发)
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
暂无评论内容