2013-03-11 5 views
0

Я реализую стиль мышью FPS, чтобы «летать» вокруг моей сцены.glutWarpPointer делает множественные вызовы glutPassiveMotionFunc обратный вызов

У меня есть правильная вращение камеры и все, только моя проблема заключается в том, что, когда я пытаюсь деформировать мышь до середины экрана, она выполняет несколько вызовов вызова glutPassiveMotionFunc. Поэтому вместо того, чтобы телепортировать мышь, она перемещает ее туда на несколько движений. Эти движения обрабатываются и возвращают камеру в исходное положение.

Как проверить, что мышь была фактически перемещена, и она не была вызвана функцией glutWarpPointer.

Я попытался не обрабатывать движения, если указатель находится посередине экрана, но это не помогает.

Я хочу, чтобы моя программа работала на Linux и Windows, поэтому я не могу использовать функции, специфичные для ОС.

ответ

0

Я бы не назвал это отличное решение, но оно должно работать:

bool isWarpingPointer = false; 

void MyPassiveMovementCallback() 
{ 
    if (isWarpingPointer) 
    { 
     return; 
    } 

    //proceed normally 
} 

//elsewhere 
isWarpingPointer = true; 
glutWarpPointer(); 
isWarpingPointer = false; 
+0

ли FreeGLUT гарантированно вызвать функцию обратного вызова мыши внутри вызова 'glutWarpPointer'? –

+0

Он, кажется, не вызывает обратный вызов мыши из вызова glutWarpPointer. Чтобы выполнить эту работу, вам придется игнорировать следующий обратный вызов, предполагая, что он вызван glutWarpPointer и установите значение isWarpingPointer равным false. Не идеально, но грубо работает. – Richy321

Смежные вопросы