天天看點

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;

運作結果

源碼下載下傳