|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
||||||
Повороты в 3д как получить нормальную матрицу?27.03.2014, 09:13. Показов 2047. Ответов 15
Метки нет (Все метки)
Делаю космич симулятор - кораблик вращается и летит вперед согласно новому направлению после вращения. Летает он правильно - всегда носом вперед как бы его не вращали. Но поворачивается/вращается он правильно только вокруг 1 оси которая является первым множителем в данном случае XMMatrixRotationX(Rx) (т.е он всегда правильно вращается вверх/низ при нажатии соответствующей клавиши ) Остальные оси - нет(они какбы остаются не движимые). Если переставить на первое место вращение допустим вокруг Y то он всегда правильно вращается вокруг Y (т.е вправо/лево) но вверх уже нет. Как исправить/переделать чтобы Кораблик всегда правильно поворачивался по всем осям а не только по одной ?(первой в формуле). Я вообще еще новичок поэтому прошу помочь доступным языком если не трудно, заранее спасибо. Добавлено через 15 часов 48 минут Upd Добавил мировые и локальные оси.(кораблик нарисован чюток выше поэтому он не в центре)Вверх всегда верно. Другие оси только в определенных положениях. SWAD камера / FGHT передвижение корабля / JLKIUO вращение. http://www.fayloobmennik.net/3679151 Добавлено через 20 часов 26 минут пичаль nobody =\ Добавлено через 14 часов 56 минут Нашел не безызвестное приложение по сравнению вращений которое наглядно демонстрирует разницу результатов кватернион/эйлер (хотя я вроде как использую матрицы что поидее не сильнов влияет на мою проблему) Вот оно https://disk.yandex.ua/public/... F6pC1r0%3D Понажимайте wsadqe и увидите что белый самолетик всегда знает где у него верх а где право итд в отличии от моего случая.
0
|
||||||
| 27.03.2014, 09:13 | |
|
Ответы с готовыми решениями:
15
Как добавить в игру повороты змейки? Как сделать повороты фигур в Тетрисе! Как найти повороты вправо, влево в двумерном массиве? |
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
|
| 28.03.2014, 14:16 [ТС] | |
|
упростим вопрос как реализовать повороты как в этом приложении с белым самолетом
https://disk.yandex.ua/public/... F6pC1r0%3D
0
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||
| 28.03.2014, 17:33 | ||
|
1
|
||
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
||
| 28.03.2014, 18:03 [ТС] | ||
В этом то и проблема.
0
|
||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
| 28.03.2014, 18:49 | |
|
Да, я тоже с этими координатами путаюсь время от времени... Тогда, думаю, можно состояние объекта представить текущей матрицей поворота и 3 векторами - локальными осями. Тогда при любом повороте обновляются матрица и 2 другие оси.
1
|
|
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
||
| 28.03.2014, 20:51 [ТС] | ||
Как это реализовать. У меня состояние обьекта (если я правильно понял это выражение) итоговая матрица модели находиться как: MeshWorld=Scale*Rotation*Translate; Где MeshWorld изначально еденичная. Rotation = XMMatrixRotationX(Rx)*XMMatrixRotationY( Ry)*XMMatrixRotationZ(Rz); (Rx Ry Rz углы с клавы/мышки) После чего WVP = MeshWorld*Viev*Progection; отправляеться в шейдер. Что нужно сделать/изменить чтобы воплотить вашу идею? (хотябы на псевдокоде)
0
|
||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
| 28.03.2014, 21:29 | |
|
Так нужны ли вообще Rx, Ry, Rz? Я предлагаю ориентацию кораблика в пространстве хранить как матрицу поворота. Тогда матрица всегда будет уже готовая, а в её строках (или столбцы - смотря как всё представляется) получатся оси локальной системы координат.
0
|
|
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
||
| 29.03.2014, 03:27 [ТС] | ||
Просто задать нужную ориентацию один раз для этого явно не достаточно. А локальные оси и изменяються в следствии умножения на матрицу поворота. Проблема как раз в том, что потом корабль не крутиться вокруг них правильно, кроме одной (первой в формуле матрицы поворота). Происходит все как в шутерах где голову можно наклонять верх в низ а крутиться только вокруг Y. Для шутеров это вполне нормально.Но в управлении летательным апаратом в космосе это весело кончно но едвали правильно. Это всеравно что ехать на машине по дороге без наклонов со скоростью 200 км в час при этом влево и в право поворачиваем нормально. Но теперь если мы будем ехать по спуску т.е дорога наклониться то наше вправо будет как будто мы куборем покатились с дороги через правый бок. А белый самолетик всегда знает где право и автомобиль тоже независимо от наклона дороги или горизонта. Просто в космосе еще есть вращение вокруг Z оси направления. Автомобилю такое ненужно) Добавлено через 5 часов 4 минуты вот парень делает в мат лабе то что мне нужно http://www.youtube.com/watch?v=UcYoC7uQzNA я мало что понимаю из его обьяснений касательно мат лаба - поэтому нужен рабочий код на с++ этого всего дела, или такойже код на матлабе или где либо еще.
0
|
||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||||||
| 29.03.2014, 11:13 | ||||||
Сообщение было отмечено TierX как решение
Решение
Вот то, что я предлагал без углов:
Полностью (код C++11, библиотека glm, проект Code::Blocks): Spaceship.zip Основные моменты
Но, ак я понял, вариант с кватернионами лучше всех, только мне бы самому ещё с этим разобраться... Там по ссылке из описания видео есть статья ещё: http://www.gamedev.ru/articles/?id=30129
1
|
||||||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
| 29.03.2014, 11:21 | |
|
Вообще даже Spaceship::pos не нужна, надо просто сделать матрицу 4x4.
0
|
|
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
|||
| 29.03.2014, 20:58 [ТС] | |||
Но на первый взгляд все работает как нужно будем разберать. А нащет видио и статей. Я их все читал но толку мало там весь прикол в хранении каких добавочных угловых смещений которые добавляються к обычным поворотам.И да спасибо огромное ![]() Добавлено через 1 час 13 минут
0
|
|||
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||||||
| 29.03.2014, 21:07 | ||||||
Сообщение было отмечено TierX как решение
Решение
В стиле DirectX при умножении вектор слева, а матрица справа, и матрицы надо в обратном порядке умножать:
1
|
||||||
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
|
| 29.03.2014, 21:44 [ТС] | |
|
РАБОТАЕТ !1111
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() :se nor:![]() Добавлено через 5 минут Только тут порядок умножения не влияет а влияет то что нужно было использовать XMMatrixRotationAxis а не XMRotationX(X) Насколько я понял. точнее порядок умножения первых трех множетелей с осями Добавлено через 11 минут даже неееееттттт нетак можно и MRotationX(X) только все дело в том что обязательно в MeshRotationMatrix = (XMMatrixRotationY(Ry)*XMMatrixRotationX (Rx)*XMMatrixRotationZ(Rz))*MeshRotation Matrix; *MeshRotationMatrix; должно быть в конце формулы. Допустим так будет не верно MeshRotationMatrix *= (XMMatrixRotationY(Ry)*XMMatrixRotationX (Rx)*XMMatrixRotationZ(Rz)); Точно так как и MeshRotationMatrix =MeshRotationMatrix*(XMMatrixRotationY(R y)*XMMatrixRotationX(Rx)*XMMatrixRotatio nZ(Rz)); Добавлено через 7 минут Почему тогда перемена мест множетелей осей невилияет на результат но расположение MeshRotationMatrix спереди формулы или сзади влияет? P.S. Блин я с самого начала знал что тут или все просто достаточно гдето типо знако пменять. Или нереально сложно.
0
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
||
| 29.03.2014, 22:04 | ||
|
0
|
||
|
21 / 21 / 0
Регистрация: 28.02.2014
Сообщений: 138
|
|
| 30.03.2014, 03:36 [ТС] | |
|
Somebody,
Тоесть они пошагово поочереди меняються но настолько быстро что незаметно? Я в принципе за время поиска рещений неплохо разобрался в матрицах поворота но всеже я немогу понять смысла перестановки MeshRotationMatrix в конец. Посути мы "старую" матрицу поворота множим на "свежую" но очередность осей что там что там одинаковые. Почему тогда местоположение старой матрицы как множетеля влияет так сильно.
0
|
|
|
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|||||||||
| 30.03.2014, 11:53 | |||||||||
|
Вот, например, что-то похожее. Физический движок моделирует равноускоренное движение с шагом по времени dt. За каждый кадр тело перемещается на
0
|
|||||||||
| 30.03.2014, 11:53 | |
|
Помогаю со студенческими работами здесь
16
Как получить 3D матрицу? Как получить матрицу Как получить матрицу изображения Как из одного вектора получить матрицу? Получить матрицу из чисел, заполняющих матрицу по линиям, параллельным главной диагонали Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|