Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / [Решено] Перевод стрелок с кватернионами (2 стр)

[Решено] Перевод стрелок с кватернионами (2 стр)

Поделиться

Страницы: 1 2 3 Следующая

programinaЗабаненwww13 дек. 20168:20#15
Для равномерной угловой скорости можно сделать так:
qa += (inverse(qb) * qa) / 50.0f;
но такое решение мне кажется громоздким и тормозным.
AMM1AKПостоялецwww13 дек. 20168:32#16
programina
Так изменяй D синусоидально! Вместо D подставь sin(pi/2*t), где t меняется от 0 до 1
programinaЗабаненwww13 дек. 20169:51#17
АММ1АК
> Вместо D подставь sin(pi/2*t)
точно, надо попробовать так.
MisanthropeПостоялецwww13 дек. 201610:16#18
Dronas
> Балин, кто-нибудь уже скажет накуа все это? )
изходя из сеттинга игры которую она делает, наверное планетарные системы массово вращать надо:)
programinaЗабаненwww13 дек. 201611:26#19
Misanthrope
> изходя из сеттинга игры
вращение камеры вокруг актёра. Когда актёр стоит камера должна свободно крутиться вокруг оного, но как только актёр начинает движение, он начинает разворачиваться в ту сторону куда смотрит камера.
programinaЗабаненwww13 дек. 201611:28#20
Вообще не плохо бы иметь под рукой сайт-сборник, где представлены популярные алгоритмы применяемые в играх. Нечто подобное есть для юнити, но и то очень мало.
ArchiDevilПостоялецwww13 дек. 201611:54#21
programina
Ну так сделай такой. Многим хелп-вампирам поможешь.
foxesПостоялецwww13 дек. 201613:01#22
programina
> вращение камеры вокруг актёра. Когда актёр стоит камера должна свободно
> крутиться вокруг оного, но как только актёр начинает движение, он начинает
> разворачиваться в ту сторону куда смотрит камера.
Мне кажет здесь решение тривиальное, а у тебя подход не стой стороны.
Как ты управляешь актёром?
Камера при этом не двигается?
По сути это поворот одного вектора до направления другого. Находиться угол между векторами и перпендикуляр между ними - векторное умножение (CrossProduct)
До тех пор пока угол между векторами !=0 (eps)

Если тебе нужна постоянная скорость то угол между векторами заменяешь на константу (const*DeltaTime = eps) из этого можно получить кватернион на который должен повернуться актер на текущем шаге.

Если у тебя различное направление угла наклона камеры и актера, и нужно так оставить, то делаешь тоже самое через проекцию этих векторов в плоскость актера.

programina
> где представлены популярные алгоритмы применяемые в играх.
Это как перечислить все комбинации вариантов состояния различных устройств - список условно бесконечен.
Обычно это все достаточно просто придумать самому.

Правка: 13 дек. 2016 13:30

programinaЗабаненwww13 дек. 201615:17#23
foxes
> Находиться угол между векторами
а ты попробуй найди его этот угол, если углов не один, а два, например текущий курс на 350°, а желаемый на 10°, казалось бы все просто, нужно повернуть на 20° по ч.с., но не факт, что так и будет, может получиться поворот на 340° против ч.с. Это все решаемо и есть даже формула:
а += atan2(cos(a), sin(b)) / 50.0
но ведь это тот же самый кватернион только в профиль. :)
L1fПостоялецwww13 дек. 201617:04#24
programina
Это называется Shortest arc http://www.gamedev.ru/code/articles/?id=4215&page=3
mr.DIMASПостоялецwww13 дек. 201623:19#25
foxes
> (const*DeltaTime = eps)
За использование deltaTime надо бить палкой по рукам. Это первый признак неправильной организации игрового цикла.

Правка: 13 дек. 2016 23:19

L1fПостоялецwww13 дек. 201623:40#26
mr.DIMAS
>За использование deltaTime надо бить палкой по рукам. Это первый признак неправильной организации игрового цикла.
Ты только что это придумал?
mr.DIMASПостоялецwww14 дек. 20160:13#27
На, почитай на досуге - http://gafferongames.com/game-physics/fix-your-timestep/
Я мудохался с deltaTime довольно долго, и потом все же отказался от него и сделал правильный цикл.
MisanthropeПостоялецwww14 дек. 20161:39#28
mr.DIMAS
> На, почитай на досуге
что вы всё с этой статьей носитесь?
>Я мудохался с deltaTime
и в чем заключалось это самое мудоханье?
IncvisitorПостоялецwww14 дек. 20162:30#29
Я вообще не понял сути проблемы. Если вращаем строго вокруг одной оси, то почему нельзя взять разницу между нужными углами и просто увеличивать скорость прироста угла по нужному закону?

Страницы: 1 2 3 Следующая

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

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