天天看点

openGL中使用GLFW库键盘按键不响应

openGL系列文章目录

文章目录

  • ​​openGL系列文章目录​​
  • ​​前言​​
  • ​​一、openGL键盘事件不响应​​
  • ​​二、解决步骤​​
  • ​​1.glfw库事件响应回调函数​​
  • ​​错误原因​​
  • ​​运行结果​​
  • ​​源码下载​​

前言

Gouraud 着色也容易受到其他伪影影响。如果镜面高光整个范围都在模型中的一个三角

形内——即高光范围内一个模型顶点也没有——那么它可能不会被渲染出来。由于镜面反射

分量是依顶点计算的,因此,当模型所有顶点都没有镜面反射分量时,其光栅化后的像素

也不会有镜面反射光。

一、openGL键盘事件不响应

二、解决步骤

1.glfw库事件响应回调函数

glfwSetKeyCallback(window, key_press_callback);

void key_press_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
  if ((key == GLFW_KEY_ESCAPE) && (action == GLFW_PRESS))
  {
    glfwSetWindowShouldClose(window, GL_TRUE);
  }
  if (action == GLFW_PRESS)
  {
    keys[key] == GLFW_TRUE;  //这里一定一定不能写成“==“,否则  按键WSAD按键失效!!!!!!!
  }
  else if (action == GLFW_RELEASE)
  {
    keys[key] == GLFW_FALSE;    //这里一定一定不能写成“==“,否则  按键WSAD按键失效!!!!!!!
  }
}      

修改

void key_press_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
  if ((key == GLFW_KEY_ESCAPE) && (action == GLFW_PRESS))
  {
    glfwSetWindowShouldClose(window, GL_TRUE);
  }
  if (action == GLFW_PRESS)
  {
    keys[key] = GLFW_TRUE;  //这里一定一定不能写成“==“,否则  按键WSAD按键失效!!!!!!!
  }
  else if (action == GLFW_RELEASE)
  {
    keys[key] = GLFW_FALSE;    //这里一定一定不能写成“==“,否则  按键WSAD按键失效!!!!!!!
  }
}      

错误原因

keys[key] == GLFW_TRUE;

keys[key] = GLFW_FALSE;

改成

keys[key] = GLFW_TRUE;

keys[key] = GLFW_FALSE;

运行结果

源码下载