GLFW — ошибка glfwSetMousePos в Mac OS X 10.7 с камерой OpenGL

Я следовал за учебниками в http://opengl-tutorials.org и пока они великолепны (я работаю на Mac, поэтому мне приходится использовать OpenGL 3.2 и GLSL 1.50, а не OpenGL 3.3 и GLSL 3.30). Пока единственная проблема с учебниками состоит в том, что при обучении 3D-камере (Учебное пособие 6: Клавиатура и мышь), когда я двигаю свою мышь, я не получаю никакого вращения, и если я это сделаю, это будет только медленно в направлении вниз; даже если я двигаю мышью в любом направлении.

Я скомпилировал данный код (OpenGL 2.1 и 3.x), а также написал его вручную, и это все еще представляет эту ошибку. Я понятия не имею, почему это произойдет. Может ли это быть ошибкой в ​​GLFW, Mac OS X или чем-то еще?

3

Решение

Я знаю, что это довольно старый вопрос, но у меня была такая же проблема, так что это может помочь. Я скачал код с сайта и в common / 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 );
2

Другие решения

Там все та же проблема с GLFW 3 на OS X 10.9.

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

glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);

Затем я закомментировал //glfwSetCursorPos(window, 1024 / 2, 768 / 2); в controls.cpp

Теперь движение мыши работает. Однако, похоже, что при просмотре куба под определенным углом вид поворачивается при перемещении мыши влево и вправо, а под другим углом вид перемещается влево и вправо, как и должно быть. Странный.

0

Для GLFW2 на OSX добавьте эту строку в ваш tutorial-XX.cpp после glfwCreateWindow (…, …,)

glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);

а затем создайте две глобальные переменные в common / controls.cpp

double xpos_old, ypos_old;

наконец закомментируйте glfwSetCursorPos (окно, 1024/2, 768/2); и изменить расчет углов на новую настройку, идея состоит в том, чтобы получить разницу между старыми мышами и новыми. Окончательный код должен выглядеть так:

// 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! ура!

0
По вопросам рекламы [email protected]