Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Ошибка вычисления поворотов объекта вокруг осей (3 стр)

Ошибка вычисления поворотов объекта вокруг осей (3 стр)

Страницы: 1 2 3 4 Следующая »
IsaevПостоялецwww10 июля 201823:09#30
}:+()___ [Smile]
> Как уже писали выше, для задания вращения надо использовать кватернионы.
да я видел, но как его можно использовать вне анимации не понял и подумал, что оно лишнее пока..., а что для анимации его можно интерполировать не знал. Создам, пожалуй, класс для него, привяжу, потом наверняка пригодится.
пока пойду переведу эту таблицу в пары угол/вектор и подумаю почему она составлена именно так и как это использовать.
IsaevПостоялецwww11 июля 201814:35#31
> }:+()___ [Smile] c 17 по 22 понятно, просто развороты на +/- 90 вокруг осей, это которые я использовал можно сказать, но их не хватило.
23 - нулевой, без поворота. А положение остальных очень приблизительно понятны. Визуально бы их увидеть все, чтобы понимать какой для какой ситуации какой индекс инициализировать
Оси то вообще как расположены, так?
Изображение

Правка: 11 июля 2018 15:17

}:+()___ [Smile]Постоялецwww11 июля 201815:42#32
Isaev
> А положение остальных очень приблизительно понятны. Визуально бы их увидеть все, чтобы понимать какой для какой ситуации инициализировать
Лучше прокачать теорию кватернионов. Ориентации в списке — это всевозможные различные комбинации поворотов на 90° вокруг осей.
Я его сгенерировал автоматически, последовательно применяя повороты на 90°.

Но если так уж интересно, то там:
- одна тривиальная ориентация (w = 1);
- повороты вокруг осей X, Y, Z на углы ±90° (w = 0.707) и 180° (w = 0);
- повороты на 180° вокруг шести диагоналей граней (биссектрисы углов между парами осей, w = 0);
- повороты на ±120° вокруг четырех диагоналей куба (w = 0.5);
Итого 1 + 3×3 + 6 + 4×2 = 24.

> Оси то вообще как расположены, так?
Это не имеет значения.

IsaevПостоялецwww12 июля 201810:47#33
}:+()___ [Smile]
> Лучше прокачать теорию кватернионов.
Да я уже в процессе) похоже с их помощью всё довольно удобно задаваться будет

IsaevПостоялецwww13 июля 201816:34#34
В общем табличку я создал и понял какой элемент за что отвечает
+ Показать

Как её теперь можно использовать для моего случая из шапки например?
т.е. для поворотов R B L F нам нужны кватернионы с индексами 1, 6, 4, 3 соответственно
применяем к кубику URF (верхний-справа-спереди) //верх - белый, перед - зеленый, справа - красный
он у нас в результате развернулся по часовой на 120°, т.е. соответствует индексу 13 в таблице
если я их перемножу, получу 12! или что с ними нужно делать?
}:+()___ [Smile]Постоялецwww14 июля 20188:02#35
Isaev
> Как её теперь можно использовать для моего случая из шапки например?
Берешь и перемножаешь все нужные повороты. Лучше это делать с помощью целочисленной таблицы умножения, чтобы не накапливать ошибку.

> если я их перемножу, получу 12! или что с ними нужно делать?
Перемножать надо в правильном порядке и с правильной стороны.
Если получаешь неправильный результат, значит где-то ошибся.

g-contПостоялецwww14 июля 201811:04#36
Надо для каждого из 27 составных кубиков хранить локальные матрицы. И вычислять какая группа повернётся.

Для удобства можно сделать фильтр по ббоксу, для той стороны, которую мы собрались вращать. По вектору вращения увеличиваем bbox на всю грань кубика и смотрим какие элементы туда попали. Строим для них матрицу поворота, которая тоже будет локальной, по отношению к глобальным координатам всего кубика.
И вращаем через эту матрицу. Тут главное не запутаться.

Правка: 14 июля 2018 11:09

IsaevПостоялецwww14 июля 201812:38#37
}:+()___ [Smile]
> Перемножать надо в правильном порядке и с правильной стороны.
> Если получаешь неправильный результат, значит где-то ошибся.
Ну я написал порядок по которому умножаю, в чём ошибка? Таблица есть по ней сразу должно быть видно что я делаю не так
bykabakПостоялецwww14 июля 201812:45#38
Тут главное не запутаться.

+++

Все дружно пошли в густой, непроходимый лес.  А зачем ?

IsaevПостоялецwww14 июля 201812:46#39
g-cont
> Надо для каждого из 27 составных кубиков хранить локальные матрицы.
вы ни разу не оптимизаторы! :) я вместо 2 целочисленных векторов на элемент пытался оставить 1, а мне прикрутили кватернионы(но эта идея мне нравится, они, похоже всё упростят, как разберусь) с плавающей арифметикой, а теперь ещё и по матрице на каждый кубик?)
g-contПостоялецwww14 июля 201813:17#40
Isaev
> вы ни разу не оптимизаторы!
Есть такое понятие, как преждевременная оптимизация. Я надеюсь в игре один кубик, а не тысяча?

Isaev
> а теперь ещё и по матрице на каждый кубик?)
Игра для спектрума делается?

Правка: 14 июля 2018 13:18

IsaevПостоялецwww14 июля 201817:03#41
g-cont
> Я надеюсь в игре один кубик, а не тысяча?
один, но он может делать десятки млн вращений при поиске решения... пока он делает это за 1 сек это хорошо, а превратить это в 20 секунд нет никакого желания
мы и так говорим о локальных координатах, ибо меремещания у меня отдельно считаются

PS: вроде работает всё! (в моей модели просто ось Z в другую сторону, надо переделать)
меня просто смутил этот ответ
}:+()___ [Smile]
> > Оси то вообще как расположены?
> Это не имеет значения.

g-contПостоялецwww14 июля 201817:50#43
Isaev
> один, но он может делать десятки млн вращений при поиске решения...
https://lenta.ru/news/2017/09/05/rubik/ цитата оттуда:
собрал кубик Рубика за 4,69 секунды
В отличие от компьютора, ни один человек в мире не способен за 5 секунд повернуть грани кубика десятки миллионов раз. Я вообще сильно сомневаюсь что он сделал более 20 поворотов за пять секунд.
Из чего вытекает другой вопрос, если уж мы ищем решение задачи, зачем нам вообще что-то анимировать а тем более вращать. А тем более десятки миллионов раз в секунду.
IsaevПостоялецwww14 июля 201817:58#44
Delfigamer
> Виртуальный кубик для тех, кто не хочет ломать пластмассовые?
Это уже есть, прекрасный симулятор от нашего соотечественника в котором собрано на данный момент больше 1800 головоломок и постоянно пополняется. Потому надобности в велосипеде нет особо.
У меня более скромный проект для более узкого круга любителей именно бандажных кубов
Delfigamer
> Или алгоритм, который из произвольного положения находит оптимальный путь к победе и показывает его?
можно и глобально, но это для ленивых, т.к. на то они и головоломки, чтобы решать самому... Более интересно исследование конкретных алгоритмов чистой оптимальной перестановки нескольких элементов в конкретной конфигурации, за какое минимальное количество ходов они вообще возможны.
технически ничего интересного, будет граф, будет поиск по A до B, скорее всего в 2 потока одновременно с двух вершин и поиском пересечения
Страницы: 1 2 3 4 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр