Форум: "Игры";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];
ВнизВращение Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c