Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.08;
Скачать: CL | DM;

Вниз

Вращение   Найти похожие ветки 

 
com2003   (2003-03-04 20:08) [0]

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


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

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


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

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


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

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


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

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


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


> Dexus (05.03.03 08:00)

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


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

2Думкин

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


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


> pasha676 (05.03.03 09:35)

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


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

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

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

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

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


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

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

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

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


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


> Dexus (05.03.03 12:09)

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


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

2Dexus


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



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


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

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


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

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


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


> Dexus (05.03.03 12:20)

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


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

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

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


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


> Dexus (05.03.03 12:36)

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



Страницы: 1 вся ветка

Текущий архив: 2003.09.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.02 c
14-24678
Yanis
2003-08-20 02:05
2003.09.08
Как вам альфа Doom3


1-24434
Abikos
2003-08-25 18:48
2003.09.08
вопрос о Frame ах ....


1-24446
Skier
2003-08-25 12:52
2003.09.08
---|Ветка была без названия|---


1-24479
Сан Саныч
2003-08-26 03:12
2003.09.08
Чайниковская проблема с Class Factory


7-24726
Diamond Dog
2003-06-25 19:35
2003.09.08
Отключение выбора режима загрузки винды при нажатии F8