Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
3-24339
Vitaliy33
2003-08-13 13:25
2003.09.08
Текстовые таблицы


14-24656
Kost
2003-08-20 17:46
2003.09.08
Таблицы


8-24561
LK
2003-05-12 16:26
2003.09.08
Midi API


6-24571
venoel
2003-07-06 21:41
2003.09.08
Формирование картинки на сервере


1-24540
NorthMan
2003-08-26 19:14
2003.09.08
Народ, как в DateTimePicker программно перейти на





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский