|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
06.06.2020, 12:14 | #1 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
если освободить курсор и захватить его снова, то при первом движении мыши камера опять развернётся в положение 90 градусов по Х. Почему так?
На хаброхабре есть статьи (не уголовные) про новый OpenGL: https://habr.com/en/post/310790/
Прочитал их с 1-ой по 9-ую. За некоторым исключением, всё понятно. Однако, не понятно про камеру. В девятой части у них написано как сделать камеру. Если переписать код как есть, то камера работает. Но есть странный глюк. При первом движении мыши, камера резко разворачивается в положение 90 градусов по оси Х. А потом всё нормально. Не пойму, почему так происходит. Вот мой код: https://pastebin.com/gQMdP7sp Я его немного модифицировал для упрощения понимания. Ввёл структуру CAMERA. Переименовал некоторые переменные. Сделал, чтобы курсор захватывался при клике в окно и освобождался при нажатии ESC. Но суть осталась той же. Кстати, если освободить курсор и захватить его снова, то при первом движении мыши камера опять развернётся в положение 90 градусов по Х. Почему так? Оригинальный код с хаброхабра, без моих модификаций, так же глючит. почему так? |
07.06.2020, 10:36 | #2 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
В ходе длительных экспериментальных тыканий выяснилось, что после захвата курсора, при первом перемещении мыши камера разворачивается в положение, заданное в поле rotation структуры CAMERA.
почему так? Код:
|
07.06.2020, 11:16 | #3 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Cтранно. Раньше мою другую тему с нормальным названием переименовали в "почему так?", а сейчас почему-то наоборот.
Последний раз редактировалось BLACK_RAIN; 07.06.2020 в 13:51. |
07.06.2020, 13:50 | #4 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Я разобрался. Проблема была из-за неправильного определения сдвига мыши (mouse delta). Надо
было создать две глобальные переменные. При клике в окно, сохранить в них центр экрана и программно переместить туда курсор. А потом просто искать разницу. В общем, как делали наши деды. Однако, у меня есть старый проект для старого OpenGL и там написан код: Код:
Если этот код работал раньше, почему он сейчас не работает? В чем разница? |
01.09.2020, 16:22 | #5 |
Форумчанин
Регистрация: 13.02.2012
Сообщений: 867
|
Странная штука этот GLFW. Сейчас вставил этот же самый код (который глючил) в другой (еще один) новый проект. Ничего не менял. Только переименовал переменную player в camera. Он просто взял и заработал! Я не знаю, почему.
Есть предположение, что код почему-то не работает в MinGW, а в вижуал студии работает. Может ли быть такое? (вопрос не риторический) Во время написания предыдущих постов я сидел на CodeBlocks + MinGW, потому что студия заглючила и перестала компилить GLFW. А сейчас я переустановил винду и студия снова заработала. И код в ней работает. Вот допиленный код, из которого убрано всё лишнее: Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
При движении курсора мыши над гридом значительно увеличивается загруженность процессора - Delphi БД | ProRockX | БД в Delphi | 16 | 28.09.2015 02:57 |
веб-камера вместо мыши | gunguru | Помощь студентам | 5 | 20.04.2012 17:21 |
опять Web-камера | hiho | Мультимедиа в Delphi | 3 | 02.01.2012 13:15 |
Почему не обновляется курсор мыши? | HunterMan | Win Api | 2 | 06.06.2008 01:39 |
Положение указателя мыши | Viteef | Общие вопросы Delphi | 4 | 26.06.2007 15:59 |