我有一個處理輸入的問題,以在屏幕上旋轉對象。OpenGL物體在PC上以正常速度旋轉,但在筆記本上速度非常快
我編寫的一切:我的桌面上它旋轉時,它應該和你可以操縱在三維空間中的對象。
在我的筆記本電腦然而,當我嘗試旋轉對象,它實際上旋轉如此之快,你可以勉強甚至看到它。我說的每秒鐘幾十轉。
我的問題是...爲什麼?爲什麼它在我的電腦上以正常速度旋轉,但在我的筆記本電腦上以瘋狂的高速旋轉?
我用每按一次鍵的旋轉是0.1 ...我的電腦上它旋轉速度不夠快,能夠控制或,但在我的筆記本電腦(和平板電腦,我測試了它在平板電腦以及),它只是旋轉方式太快!我能夠通過將旋轉量更改爲glm :: radians(1.0f)並以正常速度旋轉來修復它,但是在我的PC上,它比我想要的要慢。
我能想到的唯一的事情有事情做與增量時間和渲染速度(我計算在了我的相機控制)。
這裏是我的參考旋轉功能...
鍵盤迴調函數(注:我有布爾的全局數組稱爲鍵[],我用它來查看是否被按下某個鍵時)
// Handle the keyboard input
void keyPressed(GLFWwindow *_window, int key, int scancode, int action, int mods) {
// Close window with escape
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
// Change render to show points only with P
if (key == GLFW_KEY_P && action == GLFW_PRESS)
glPolygonMode(GL_FRONT_AND_BACK, GL_POINT);
// Change render to show filled in texture with T
if (key == GLFW_KEY_T && action == GLFW_PRESS)
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
// Change render to show "wirefram" mesh with W
if (key == GLFW_KEY_W && action == GLFW_PRESS)
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
// Array of keys, if key is being held down, sets index corresponding to appropriate integer related to key to true, and false when key is released
if (key >= 0 && key < 1024)
{
if (action == GLFW_PRESS)
keys[key] = true;
else if (action == GLFW_RELEASE)
keys[key] = false;
}
return;
}
和旋轉功能(注意:點擊[0]是布爾的另一個數組我使用,以查看是否鼠標左鍵被推動):
// rotate object based on keyboard input
// Left mouse button must not be held down for this to work
// Creates a matrix containing the appriopriate transformation, and this is later multipled to the model matrix
void rotate_object(glm::mat4 &transform)
{
// Rotate along z axis (left and right, like a barrel roll)
if (!click[0] && keys[GLFW_KEY_LEFT])
transform = glm::rotate(transform, glm::radians(1.0f), glm::vec3(0.0f, 0.0f, 1.0f));
if (!click[0] && keys[GLFW_KEY_RIGHT])
transform = glm::rotate(transform, glm::radians(-1.0f), glm::vec3(0.0f, 0.0f, 1.0f));
// Rotate along x axis (up and down, like a flip)
if (!click[0] && keys[GLFW_KEY_UP])
transform = glm::rotate(transform, glm::radians(1.0f), glm::vec3(1.0f, 0.0f, 0.0f));
if (!click[0] && keys[GLFW_KEY_DOWN])
transform = glm::rotate(transform, glm::radians(-1.0f), glm::vec3(1.0f, 0.0f, 0.0f));
// Rotate along y axes (make object spin)
if (!click[0] && keys[GLFW_KEY_K])
transform = glm::rotate(transform, glm::radians(1.0f), glm::vec3(0.0f, 1.0f, 0.0f));
if (!click[0] && keys[GLFW_KEY_L])
transform = glm::rotate(transform, glm::radians(-1.0f), glm::vec3(0.0f, 1.0f, 0.0f));
}
感謝您對放!
感謝,
此循環的每次迭代都有固定的旋轉。有時間添加一些定時器! – usr2564301
這就是我在寫問題的時候想到的......我用delta時間讓我的相機運動平滑,我意識到現在我必須爲對象操作做同樣的事情! – waffledave