forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Болтовня (http://forum.boolean.name/forumdisplay.php?f=25)
-   -   3д двиг (http://forum.boolean.name/showthread.php?t=3795)

DarkKnight 02.07.2007 15:28

3д двиг
 
Доброго времени суток=)не знаете БЕСПЛАТНЫЙ ДВИГ где повороты осуществляются при помощи КВАТЕРИОНОВ,а не УГЛОВ ЭЙЛЕРА.А еще лучше если и так и так поворачивать можно.встроеные и не встроеные функции перевода кватерионов в эйлеры и обратно - это не то,нужно чтоб двиг держал нормлаьно повороты на Qaut'ах=)

З.Ы. когда постил ступил,этой теме наверно место в "поиск файлов" *SORRY*

jimon 02.07.2007 16:09

Re: 3д двиг
 
DarkKnight
а какая разница ? все равно в итоге все переводится в матрицы ...
так что программного перевода не избежать :)

moka 02.07.2007 16:26

Re: 3д двиг
 
2Д\3Д?
Мона поподробнее о квартерионах и углах уйлена, это 360 и -180 до 180?
Вообще совсем просто можно написать конвертирующие, и их использовать, и для плавных поворотов и много для чего. Например в БМаксе вообще нету работы с углами, а я написал себе функции для работы с 360 градусовыми углами и сижу "радуюсь" =)

jimon 02.07.2007 17:42

Re: 3д двиг
 
MoKa почитай :)
http://gamedev.ru/articles/?id=30129
http://www.gamedev.ru/users/wat/articles/quaternions
http://ru.wikipedia.org/wiki/Углы_Эйлера

DarkKnight 03.07.2007 02:02

Re: 3д двиг
 
в ирре например у меня перевести не получилось..=((
у меня есть угол в кватерионе,мне надо повернуть на этот угол мешь,а поворачивается она по эйлерам..=(( и перевод чето не получился=(

johnk 03.07.2007 07:01

Re: 3д двиг
 
И зачем тебе, простите, такой гемор?

jimon 03.07.2007 11:43

Re: 3д двиг
 
DarkKnight
вот ето работает у меня по крайней мере
переводит квартерион из ODE в irrlicht :)

Код:

вот ето просто понять к чему все :
GRAD_PI = 180.0 / 3.1415926535897932384626433832795
GRAD_PI2 = 3.1415926535897932384626433832795 / 180.0
typedef float dReal;
typedef dReal dQuaternion[4];

void Quaternion_To_Euler(const dQuaternion quaternion,vector3df &euler)
{
        dReal w,x,y,z;
        w=quaternion[0];
        x=quaternion[1];
        y=quaternion[2];
        z=quaternion[3];
        double sqw = w*w;
        double sqx = x*x;
        double sqy = y*y;
        double sqz = z*z;
        euler.Z = (float) (atan2(2.0 * (x*y + z*w),(sqx - sqy - sqz + sqw))*GRAD_PI);
        euler.X = (float) (atan2(2.0 * (y*z + x*w),(-sqx - sqy + sqz + sqw))*GRAD_PI);
        euler.Y = (float) (asin(-2.0 * (x*z - y*w))*GRAD_PI);
}
void Euler_To_Quaternion(const vector3df &euler, dQuaternion quaternion)
{
        double _heading=euler.Z*GRAD_PI2/2.0;
        double _attitude=euler.Y*GRAD_PI2/2.0;
        double _bank=euler.X*GRAD_PI2/2.0;
        double c1 = cos(_heading);
        double s1 = sin(_heading);
        double c2 = cos(_attitude);
        double s2 = sin(_attitude);
        double c3 = cos(_bank);
        double s3 = sin(_bank);
        double c1c2 = c1*c2;
        double s1s2 = s1*s2;
        quaternion[0]=(dReal) (c1c2*c3 + s1s2*s3);
        quaternion[1]=(dReal) (c1c2*s3 - s1s2*c3);
        quaternion[2]=(dReal) (c1*s2*c3 + s1*c2*s3);
        quaternion[3]=(dReal) (s1*c2*c3 - c1*s2*s3);
}

в принципе ничего нет не возможного
и такой переход прийдется делать ... :/

ps. потом просто перепиши квартерион ode на ирлихтовский ...


Часовой пояс GMT +4, время: 07:03.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot