Войти
ПрограммированиеФорумГрафика

как же избавиться от gimbal lock??

Страницы: 1 2 3 Следующая »
#0
13:30, 28 дек. 2009

ну собсно проблема в названии темы. что подскажете??


#1
13:35, 28 дек. 2009

vserver
> что подскажете??
кватернионы?

#2
13:40, 28 дек. 2009

гг так я ими как раз и пользуюсь

1.беру три квантериона, повернутых на соотв. углы вокруг осей координат
2.перемножаю их
3.перевожу в матрицу и умножаю

Но БЛИН тот же результат что при комбинации glRotatef

что же надо делать с квантерионами???
исходные данные: RX,RY,RZ ---- и как на основе этих данных сделать нужные квантерионы??

#3
13:45, 28 дек. 2009

vserver
> 1.беру три квантериона, повернутых на соотв. углы вокруг осей координат
Fail. Неправильно используешь кватернионы. Кватернион(грубо говоря) - это вектор направления оси и угол поворота относительно этой оси.

vserver
> Но БЛИН тот же результат что при комбинации glRotatef
Не удивительно. Ты делаешь тоже самое что и glRotatef.

> исходные данные: RX,RY,RZ
Этот формат даных(углы Эйлера) и вызывает gimbal lock.

> и как на основе этих данных сделать нужные квантерионы??
Чтобы не было gimbal lock - никак. Храни сразу в кватернионах.

#4
13:48, 28 дек. 2009

а можно чуть поподробнее??
например квантерион поворота по оси ox : {w=cos(rx),0,sin(rx),0}

#5
13:49, 28 дек. 2009

как в статье http://www.gamedev.ru/code/articles/?id=4215

#6
13:50, 28 дек. 2009

аааа понятно но все таки можно поподробнее
как хранить углы в квантерионах?

#7
13:50, 28 дек. 2009

vserver
> а можно чуть поподробнее??
http://www.gamedev.ru/code/articles/?id=4215

#8
13:50, 28 дек. 2009

или вообще поворот в квантерионах??

#9
13:51, 28 дек. 2009

vserver
> как хранить углы в квантерионах?
q = [ V*sin(alpha/2), cos(alpha/2) ] V - вектор оси. alpha - угол поворота вокруг оси.

> или вообще поворот в квантерионах??
Да.

#10
13:57, 28 дек. 2009

все равно как-то непонятно

#11
13:58, 28 дек. 2009

а как все таки правильно исп. квантерион

#12
13:59, 28 дек. 2009

Существуют и другие представления кватерниона, которые я не буду рассматривать.
Как же хранят вращение в кватернионе? Практически также как и в "Axis Angle" представлении, первые три компонента представляют вектор, лежащий на оси вращения, причем длина вектора зависит от угла поворота. Четвертый компонент зависит только от величины угла поворота. Зависимость довольно простая — если взять единичный вектор V за ось вращения и угол alpha за вращение вокруг этой оси, тогда кватернион представляющий это вращение
можно записать как:

q = [ V*sin(alpha/2), cos(alpha/2) ]

#13
14:00, 28 дек. 2009

ииииии......???

#14
14:01, 28 дек. 2009

аа тоесть квантерион задает вращение объекта не относительно трех, а относительно одной оси!!
но как ее получить???? ведь надо не одну ось использовать, а 3

Страницы: 1 2 3 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.