Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Вращение и кватернионы. Сборник рецептов. (Комментарии к статье)

Вращение и кватернионы. Сборник рецептов. (Комментарии к статье)

Страницы: 1 2 3 Следующая »
robotПостоялецwww21 авг. 20049:44#0
Комментарий к Статье Вращение и кватернионы. Сборник рецептов

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

real-ShadowНовичокwww21 авг. 20049:44#1
Для лучшего понимания статьи хорошо бы еще все описанные функции представить математически(с использованием матриц, квантерионов), а не только с помощью кода.
minorlogicПостоялецwww21 авг. 200411:29#2
real-Shadow
Статья ориентирована на практическое использование кватернионов, поэтому не содержит мат . выводов.
И лично для меня НАМНОГО понятнее строчки кода чем математические формулы.
minorlogicПостоялецwww27 авг. 200517:13#3
Пояснения к коду в статье
Лучше всего скачать исходники + рекомендуемые реализации векторов (из Nebula Device)


%  скалярное произведение векторов

  •   векторное произведение векторов
    TINY - маленько число , за пределами используемой точности .  например (0.000001) .
  • CyberZXПостоялецwww27 авг. 200519:55#4
    >Как мы видим, при конвертировании используется только умножения и сложения, что является несомненным преимуществом на современных процессорах.
    очень порадовало слово "современных" :)))
    CyberZXПостоялецwww27 авг. 200519:56#5
    minorlogic
    >TINY - маленько число , за пределами используемой точности . например (0.000001) .
    в С++ лучше использывать std::numeric_limits<float>::epsilon()
    arabescПостоялецwww27 авг. 200520:51#6
    Скалярное произведение полезно тем, что дает косинус половины угла между двумя кватернионами умноженную на их длину.
    1) Фраза построена неправильно: косинус ... угла и умноженную.
    2) Непонятно: результат произведения один, кватернионов два, а длина снова одна, но их - так на чью длину умножен результат? На сумму/произведение/среднее длин исходных кватернионов? Судя по всему, всё же на произведение длин исходных кватерионов, однако результат длиной уже не является.
    _WinnieПостоялецwww27 авг. 200521:18#7
    CyberZX
    Почему лучше? Это все-лишь навсего самое маленькое число, которое прибавленное к 1 даст уже не 1. Погрешность при вычислении может быть гораздо больше.
    А всяки TINY и EPSILON лучше вообще не использовать, их использование говорит о том, что программисту было лень придумать числено устойчивый алгоритм.
    minorlogicПостоялецwww27 авг. 200523:05#8
    CyberZX
    Именно на современных ! По моим тестам на пне третьем всетаки деление с плавающей точкой иногда было медленнее умножения, объяснить не могу , может компилятор проглючил , но разница была , причем за предплами точности измерения.  Настаивать на этом не буду , в любом случае есть много процессоров кроме x86.

    Про epsilon , tiny я придерживаюсь взглядов _Winnie, если они появились , значит гдет лень было устоичивое решение искать . Лично меня в формуле , shortest_arc это обломило, до конца не додумал , за что стыдно :(


    arabesc
    Первый блин комом , в статье и стиль страдает и предложения длинные , и много других недостатков. Это еще неплохо , потому что мне помогли статью причесать в свое время. В оригинале , она была еще хуже. Пульцеровской премии мне не видать :(

    Но зато математика (тьху тьху) вроде не глючила.

    Всем спасибо за коментарии !

    arabescПостоялецwww28 авг. 20052:07#9
    minorlogic
    Лично меня в формуле , shortest_arc это обломило, до конца не додумал , за что стыдно :(
    И тем не менее, тут ссылаются. И этот же код включен в обновление для CD к книге.

    Первый блин комом
    Статьи после публикации не подлежат редактированию?

    Спасибо за труд! :)

    minorlogicПостоялецwww28 авг. 200511:53#10
    arabesc
    Прикольно! Вот так вот , глюки и перетекают из одного источника в другой :). Не то что бы , глюк , но до конца недодуманное решение.
    ArksНовичокwww29 окт. 200621:55#11
    Так, разбирался со статьёй и натолкнулся на это:
    qq' = [ vv' + wv' + w'v, ww – v•v' ]
    Опечатка, я так полагаю ( ww ), пожалуй должно быть так:
    qq' = [ vv' + wv' + w'v, wW' – v•v' ]
    (апостроф после второй w).
    Или нет?

    И натолкнувшись на это, я начал лазить по глобалу, чтобы лучше разобраться с кватернионами. Нашёл эту статью в википедии: Кватернионы

    Так вот, посчитал сам умножение, получил совершенно другой результат:

    (x+yi+zj+wk) * (x'+y'i+z'j+w'k) = xx' + xy'i + xz'j + xw'k + yx'i + yy'i^2 + yz'ij +  yw'ik +
    + zx'j + zy'ji + zz'j^2 + zw'jk + wx'k + wy'ki + wz'kj + ww'k^2 =
    = xx' + xy'i + xz'j + xw'k + yx'i - yy' + yz'k - yw'j + zx'j - zy'k - zz' + zw'i + wx'k + wy'j - wz'i - ww' =
    = (xx' - yy' - zz' - ww') + (xy' + yx' + zw' - wz')i + (xz' - yw' + zx' + wy')j + (xw' + yz' - zy' + wx')k

    Т.е. во-первых - (xx' - yy' - zz' - ww') никак не равно ww' - vv'=ww' - xx'-yy'-zz'  - даже если поменять знаки на обратные.
    Во-вторых: обычно v(x,y,z) = xi + yj + zk. А тут получается, что наоборот: v(x,y,z) = xk + yj + zi. Странно...
    Вроде я в вычислениях не ошибся... Может кто-нибудь разъяснит мне, что здесь к чему?

    Удалёнwww29 окт. 200622:26#12
    Arks
    >Опечатка, я так полагаю ( ww ), пожалуй должно быть так:...
    Да.

    >Так вот, посчитал сам умножение, получил совершенно другой результат:...
    Ты i, j, k не там расставил.

    ArksНовичокwww30 окт. 20068:30#13
    > Ты i, j, k не там расставил.
    Ах, ну да...)) Всё сходится. Вопрос закрыт.
    SorSНовичокwww29 июля 200720:49#14
    #include "mathlib/vector.h" - взять можно сдесь http://nebuladevice.cubik.org/documentation/nebula2/dir_000004.shtml.
    Но дним этим файлом не обойтись.
    Страницы: 1 2 3 Следующая »

    / Форум / Программирование игр / Общее

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

    2001—2018 © GameDev.ru — Разработка игр