1 | ||||||
glm::rotate отрабатывает неожиданным образом04.01.2021, 08:25. Показов 3258. Ответов 4
Мне нужно сделать, чтобы в программе камера, смотрящая на кубик Рубика, могла передвигаться относительно него на 90 градусов по 4 направлениям по нажатию кнопок и слегка изменяла направление взгляда в зависимости от положения курсора мыши. Кнопки: WAXD или стрелки.
Проблема в том, что для пользователя после поворота куб исчезает (хотя если докрутить ещё 3 поворота, появляется опять), а в коде максимально то, что я смог локализовать, это строки 378-379:
A или влево ) после rotate UnvariatedView получит 3 столбец (-5, 0, 0, 1) (или (5, 0, 0, 1) ) , но он остаётся (0, 0, -5, 1) .Я сверялся с Tutorial 3 : Matrices, а именно с: – вроде бы я понимаю суть операции правильно. FollowingScene.7z
0
|
04.01.2021, 08:25 | |
Ответы с готовыми решениями:
4
Cisco IP SLA и EEM не отрабатывает должным образом. В чем проблема? Коды, приводящие к неожиданным результатам Регулярка findstr отрабатывает на одном файле, но не отрабатывает на другом Результат запроса отрабатывает в консоли, но не отрабатывает в модуле |
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
|
|||||||||||
04.01.2021, 08:44 | 2 | ||||||||||
Это потому что смещение камеры не верное. Обоснуйте математически вот это:
1
|
04.01.2021, 10:59 [ТС] | 3 | |||||||||||||||||||||||||
До поворота смещение камеры
(0, 0, -5) . После поворота должно быть (-5, 0, 0)
iv3BaseForRotation я хочу хранить единичный целочисленный вектор направения на камеру, а её расстояние от начала координат храню в fCameraDistance . Потому, что если хранить, например в glm::tvec3<int> , то с одной стороны нельзя будет указать расстояние от начала координат, например 3.5, а с другой стороны, кто меня страхует, что я не получу в нём что-нибудь вроде (3, 1, 0) , что принципиально противоречит моему подходу? Что-то вроде строгого хранения данных.Поправьте меня, если я неправ, вот это:
UnvariatedView и im3BaseForRotation у меня определяют преобразование в одном и том же направлении (нет времени думать, 5 минут редактирования)?Добавлено через 5 минут Для того, чтобы разобраться, почему поворот на
0
|
с++
1282 / 523 / 225
Регистрация: 15.07.2015
Сообщений: 2,562
|
|
04.01.2021, 11:30 | 4 |
а почему M_PI_2 надо умножать(pi * 0,5), а не делить ли надо pi/2 или я чего то не знаю?
https://docs.microsoft.com/en-... w=msvc-160
0
|
6107 / 3461 / 1406
Регистрация: 07.02.2019
Сообщений: 8,794
|
||||||
04.01.2021, 20:03 | 5 | |||||
Сообщение было отмечено GoldenId как решение
Решение
GoldenId, это не математическое обоснование .
Если просто в двух словах, ваша матрица вида(fBaseForRotation()) - это комбинация двух преобразований - поворот и перенос (R * T). Это простая матрица. Что бы после узнать преобразование СК(системы координат) вида в мировой СК, нужно найти обратную матрицу. Четвёртый столбец этой матрицы и будет описывать положение камеры в мировой СК. Оно вам и нужно, что бы вычислить необходимое смещение(со знаком минус, т.к. <перенос камеры> = -<перенос мира>). Транспонирование верхней левой 3х3 матрицы invView - просто так, раз уж инвертировали уже(в вашем случае это "чистая" матрица вращения, значит R-1 = RT, можно было просто im3BaseForRotation = mat3(UnvariatedView); .Опять же, в вашем случае преобразование не затрагивает гомогенную компоненту, поэтому да, она будет единицей. Я просто по привычке перевожу в аффиные координнаты. Ну и в целом, в вашем простом случае всё это избыточно. Можно эту ветку кода упростить так:
glfwSetInputMode( window, GLFW_STICKY_KEYS, GL_TRUE ); и того, что glfwGetKey вызывается только по условию if ( !rotation ) , у вас поворот выполняется дважды. Что бы этого не было, либо выключите GLFW_STICKY_KEYS, либо снимайте флаги состояния glfwGetKey вне условия(а в условии только обрабатывайте их), либо сделайте по человечески обработку событий внутри колбэка.
1
|
04.01.2021, 20:03 | |
04.01.2021, 20:03 | |
Помогаю со студенческими работами здесь
5
Камера glm Переменные glm::ortho Задачка с unproject (glm) Glm::ortho не работает Хранить ли векторы в glm::vec4? GLM , функции трансформации матриц Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |