2013-01-22 63 views
3

我一直在關注http://opengl-tutorials.org上的教程,它們非常出色(我在Mac上,所以我必須使用OpenGL 3.2和GLSL 1.50而不是OpenGL 3.3和GLSL 3.30)。到目前爲止,教程中唯一的問題是,在3D攝像頭教程(教程6:鍵盤和鼠標)中,當我移動鼠標時,我沒有得到任何旋轉,如果我這樣做,它只會緩慢向下;即使我將鼠標移動到任何方向。GLFW - glfwSetMousePos使用OpenGL相機的Mac OS X 10.7上的錯誤

我編寫了給定的代碼(OpenGL 2.1和3.x)以及手工編寫,並且仍然存在這個錯誤。我不知道爲什麼會發生這種情況。這可能是GLFW,Mac OS X或其他的錯誤嗎?

+0

把這張貼到[GLFW bug追蹤器](http://sourceforge.net/p/glfw/bugs/)怎麼樣? – Stacker

回答

2

我知道這是一個相當古老的問題,但我有同樣的問題,所以它可能會有所幫助。我已經從網站和普通/ controls.cpp這一行是註釋下載代碼:

glfwSetMousePos(1024/2, 768/2); 

顯然存在GLFW和MacOS針對此指令不能正常工作的錯誤。希望他們在新版本中修正它,但我還沒有測試過它。

在旁註中,評論此行會使教程正常工作,但是在夾緊垂直攝像機角度時可能會遇到一些問題:如果您將鼠標移過夾緊點(比如上移),鼠標位置將會不斷更新,當您向下移動鼠標時,必須等到相機再次移動之前到達夾緊點。

[編輯]以下是完整的修改後的代碼

// Reset mouse position for next frame 
// EDIT : Doesn't work on Mac OS, hence the code below is a bit different from the website's 
//glfwSetMousePos(1024/2, 768/2); 

// Compute new orientation 
horizontalAngle = 3.14f + mouseSpeed * float(1024/2 - xpos); 
verticalAngle = mouseSpeed * float(768/2 - ypos); 
+0

感謝您的回覆和答覆。 GLFW 3似乎可以解決它,但仍然不在GLFW 2中。它似乎是一個錯誤,但它本身就是一個「錯誤」的錯誤。 – Xplane

0

總還是有同樣的問題GLFW 3 OS X 10.9。

要禁用遊標,並將其鎖定在窗口內,我在創建窗口後添加了該遊標。

glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); 

然後我controls.cpp

接着把鼠標移動工作註釋掉//glfwSetCursorPos(window, 1024/2, 768/2);。但是,當從某個角度觀看立方體時,似乎在從左右移動鼠標時旋轉視圖,而從其他角度看,視圖左右移動。奇怪。

0

對於GLFW2在OSX後glfwCreateWindow在您的教程XX.cpp加入這一行(...,...)

glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED); 

,然後創建普通/ controls.cpp

兩個全局變量
double xpos_old, ypos_old; 

最後註釋掉glfwSetCursorPos(window,1024/2,768/2);並將角度的計算更改爲新的設置,這個想法是獲得舊的mousepos和新的設置之間的區別。最終的代碼應該是這樣的:

// Reset mouse position for next frame 
// glfwSetCursorPos(window, 1024/2, 768/2); 
// Compute new orientation 

horizontalAngle += mouseSpeed * float(xpos_old - xpos); 
verticalAngle += mouseSpeed * float(ypos_old - ypos); 
xpos_old = xpos; 
ypos_old = epos; 

這對我的Mac很好用!乾杯!