2016-07-23 146 views
0

我想知道你是如何處理鼠標控制的。鼠標旋轉

從衆多遊戲中可以看出,如果我想旋轉我的相機,鼠標通常會被鎖定。例如射擊遊戲就是這樣做的。

但是如何檢測到鼠標是否移動,如果它被阻擋移動?

我不明白這個邏輯。

我希望有人能幫助我。非常感謝!

回答

1

在我的場景中,我不禁用鼠標,我只是禁用了光標。

glfwSetInputMode(renderer::get_window(), GLFW_CURSOR, GLFW_CURSOR_DISABLED); 

這是在我初始化場景時完成的。

然後,當我移動鼠標時,我檢查了它在我的更新部分正在做(這被稱爲每一幀)

static double ratio_width = quarter_pi<float>()/static_cast<float>(renderer::get_screen_width()); 
static double ratio_height = (quarter_pi<float>() * (static_cast<float>(renderer::get_screen_height())/static_cast<float>(renderer::get_screen_width())))/static_cast<float>(renderer::get_screen_height()); 

double current_x = 0; 
double current_y = 0; 

glfwGetCursorPos(renderer::get_window(), &current_x, &current_y); 

double delta_x = current_x - prev_x; 
double delta_y = current_y - prev_y; 

delta_x *= ratio_width; 
delta_y *= ratio_height; 

cam.rotate(delta_x, -delta_y); 

prev_x = current_x; 
prev_y = current_y; 

當然,你需要比物理運動更多,像俯仰,偏航,等等,但這些都是基礎知識。

所以一個位置設置爲(0,0) - 每個框架的中心,我們測量鼠標的移動距離,然後移動相機的數量。然後,當一個新的幀到來時,它會再次重置,但是在這一點上,我們不移動相機,只移動光標位置。或者說,這就是我們正在做的事情。

對不起,我想我沒有解釋,最後一點很好,希望我的代碼更有用。它是C++與一些OpenGL相關的庫,如glew32。

+0

現在它的工作原理:D我剛剛編輯了一些行。現在我將鼠標光標每幀重置到中心。它工作得好多了,我之前就有過。哇。非常感謝。這種方式已經實現了偏航和俯仰。祝你有美好的一天:D – DotBlack