Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вращение


com2003 ©   (2003-03-04 20:08:00) 

При вращении фигуры с помощью матриц преобразования происходи сильное искажение. Как от него избавиться?


Думкин   (2003-03-05 12:46:00) [1]


> Dexus (05.03.03 12:36)

Ты х..н с пальцем не путай. Мы говорим о разных вещах разными словами.
А кватернионы - так как же, знаем-с.


Dexus   (2003-03-05 12:36:00) [2]

во вспомнил.. назваются эти штуки таким замысловатым словом "кватернион" - это как раз те самые комплексные вектора поворотов вокруг произвольной оси а не только x,y и z.
любому вращению относительно произвольной оси соответствуют 2 кватерниона

http://www.gamedev.ru/coding/10805.shtml
вот почитайте кому не верится что этих трех перемножений не достаточно ;)


Думкин   (2003-03-05 12:34:00) [3]


> Dexus (05.03.03 12:20)

И это понятно. Ясно, что с вращением - с ним спешить не надо. А собачек я там тоже покушал. %-)


pasha676   (2003-03-05 12:33:00) [4]

2Dexus


> безусловно эти все три вращения зададут полное множество
> всех пространственных ориентаций. вопрос только в том каким
> образом можно хранить эту ориентацию? в виде матрицы? -
> нет - накопление ошибки. в виде углов поворотов? хмм...



Вообще то положение объекта в пространстве как раз и задаеться с помощью трех векторов. Причем и ДиректХ и в ОпенГЛ. Положение - один вектор, направление - другой и ориентация верха - третий. Как ты будешь их хранить - твое личное дело.


> по сути вращение всегда происходит или в одну сторону, или
> в другую. но еще нужна ось вращения, заданная вектором.

В ДельфиХ так и делается. Задаеться вектор ось вращения - потом вращается. НИчего страшного в этом нет. Я не весть какой математик, но скажу что на такую фишку матрица тоже строиться.


> а может быть из виртуальной системы ориентации (при произвольных
> столкновениях, с учетом момента инерции)

Тут происходят накрутки. От вращения к инерции, влиянию посторонних объектов... Это уже физика. Это задаеться векторами скорости, ускорениями и т.д. По сути совсем другой аспект.


Думкин   (2003-03-05 12:30:00) [5]


> Dexus (05.03.03 12:09)

Это понятно. Только это другая песня.


Dexus   (2003-03-05 12:20:00) [6]

Думкин, проблема в том что ось вращения у тебя будет не мировая x-y-z а какая-то другая!

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

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


Dexus   (2003-03-05 12:09:00) [7]

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

возьмем ситуацию такую. объект повернут вниз, т.е. угол поворота вокруг оси Х -90 градусов. изначальное положение (-90,0,0). далее, он делает крен влево на 45 градусов. получается (-90,0,-45), далее он поворачивается еще вниз на 45 градусов. получается (-135,0,-45), далее он снова делает крен влево на 45 градусов. получается (-135,0,-90)??? НЕТ. получится (-135,-45,0). каким образом? (не верите можете на пальцах посмотреть).

то есть не получится.
хранить в виде двух векторов. один вектор - вперед. другой вектор - вверх.. исходя из двух этих векторов можно сформировать матрицу поворотов, по которой и поворачивать объект.
при итерационном повороте единичных векторов искажения если и возможны, то они отразятся только на перпендикулярной оси вращения. то есть возможно что крутясь вокруг одной из осей, будучи повернутым куда-то там, объект не будет идеально делать полный круг, а с погрешностью (вероятно настолько малой, что она будет заметна только после миллионов оборотов), но по крайней мере объект будет целым и не искажённым.

можете попробовать сделать вращающуюся фигурку, которуй можно было бы свободно крутить как относительно наблюдателя, так и относительно самого себя.


Думкин   (2003-03-05 10:52:00) [8]


> pasha676 (05.03.03 09:35)

И я про тоже. К тому же любая комбинация вращений - вращение. Если знаем ось относительно которой вращаемся - то матрицу можно выписать без проблем.


pasha676   (2003-03-05 09:35:00) [9]

2Думкин

В любом случае при изменении положения объекта получать матрицу трансформации надо правильно выстраивать порядок перемножения матриц преобразования.
Наверное это Dexus и имел ввиду. Почему не даст свободы я тоже не понимаю. Ведь эту конечную матрицу можно построить как угодно.


Думкин   (2003-03-05 08:09:00) [10]


> Dexus (05.03.03 08:00)

Почему не даст? О чем речь? Если можно подробнее.


Dexus   (2003-03-05 08:00:00) [11]

Надо просот делать преобразование не относительно предыдущего поворота, а изначальной фигуры. изменяя параметр углов поворотов. кстати насчет поворотов - вокруг трёх осей.. это нетривиальная задача, потому что при повороте, допустим, сначала по оси Z затем по Y и затем по Z у вас получится такой-то наклон, при иной последовательности поворотов - другой. и полной свободы поворотов нет. я помню еще года 3 назад на сайте посвященной The Elite Project была горячая дискуссия по поводу механизма поворотов космических объектов. и был предложен какой-то хитрый алгоритм, основанный на перемножении на комплексные вектора, блин, забыл как называется... в общем нужно создавать что-то вроде объект_на_экран = крутить(объект, y,x,z) или что-то в этом роде.. но еще раз повторюсь что поочередное вращение по трем осям не даст полной свободы вращения.


Думкин   (2003-03-05 07:58:00) [12]

Это от пикселизации. Тут такой вопрос возникал уже. Мы потом с парнем в переписке пробовали забодать - но по-хорошему не получилось. Это особенно в DirectX заметно, в ОпенЖЛ - слабее.


com2003   (2003-03-04 20:54:00) [13]

Смещения точек фигуры относительно друг друга.


BANick   (2003-03-04 20:40:00) [14]

Какие искажения?


Наверх

Титульная страница Поиск, карта сайта Написать письмо