Я следовал за учебниками в 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 или чем-то еще?
Я знаю, что это довольно старый вопрос, но у меня была такая же проблема, так что это может помочь. Я скачал код с сайта и в 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 );
Там все та же проблема с GLFW 3 на OS X 10.9.
Чтобы отключить курсор и таким образом удержать его внутри окна, я добавил это после того, как окно создано.
glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
Затем я закомментировал //glfwSetCursorPos(window, 1024 / 2, 768 / 2);
в controls.cpp
Теперь движение мыши работает. Однако, похоже, что при просмотре куба под определенным углом вид поворачивается при перемещении мыши влево и вправо, а под другим углом вид перемещается влево и вправо, как и должно быть. Странный.
Для 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! ура!