[mod_sa] base.matrix >> quaternion[4] - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Admin_Bot, Admin_Bot2, Admin_Bot3, Admin_Bot4  
[mod_sa] base.matrix >> quaternion[4]
bile Дата: Вторник, 03.02.2015, 14:58 | Сообщение # 1
Новичок
Сообщений: 20
Статус: Offline
Нужна функция для получения нормированного кватерниона из матрицы.

Сообщение отредактировал bile - Среда, 04.02.2015, 05:00
binaryuser Дата: Пятница, 06.02.2015, 12:07 | Сообщение # 2
Новичок
Сообщений: 1
Статус: Offline
не уверен, что это то что надо и что это вообще работает, но попробуй.
Код

void MatrixToQuaternion( tVector* right, tVector* up, tVector* at, float &quaterW, float &quaterX, float &quaterY, float &quaterZ )
{
    long double v13; // st7@1
    long double v14; // st7@3
    long double v15; // st5@5
    float v16; // st6@5
    float v17; // st7@5
    long double v18; // st6@7
    int result = 0; // eax@17
    float v20; // ST28_8@17
    float v21; // ST10_8@17
    float v22; // st7@17
    float v23; // [sp+10h] [bp-20h]@7
    float v24; // [sp+18h] [bp-18h]@9
    float v25; // [sp+20h] [bp-10h]@3

    v13 = right->X + up->Y + at->Z + 1.0f;
    if ( v13 < 0.0f )
      v13 = 0.0f;
    v25 = (float)sqrt(v13) * 0.5f;
    v14 = right->X + 1.0 - up->Y - at->Z;
    if ( v14 < 0.0f)
      v14 = 0.0f;
    v17 = (float)sqrt(v14) * 0.5f;
    v16 = 1.0f - right->X;
    v15 = up->Y + v16 - at->Z;
    if ( v15 < 0.0f )
      v15 = 0.0f;
    v23 = (float)sqrt(v15) * 0.5f;
    v18 = v16 - up->Y + at->Z;
    if ( v18 < 0.0f )
      v18 = 0.0f;
    v24 = (float)sqrt(v18) * 0.5f;
    if ( v25 < 0.0f )
      v25 = 0.0f;
    if ( v17 < 0.0f )
      v17 = 0.0f;
    if ( v23 < 0.0f )
      v23 = 0.0f;
    if ( v24 < 0.0f )
      v24 = 0.0f;
    v20 = (float)_copysign(v17, at->Y - up->Z);
    v21 = (float)_copysign(v23, right->Z - at->X);
    v22 = (float)_copysign(v24, up->X - right->Y);
    quaterW = v25;
    quaterX = v20;
    quaterY = v21;
    quaterZ = v22;
}

void MatrixToQuaternion( MATRIX4X4* matrix, tQuaternionVector* quaternion )
{
   MatrixToQuaternion( &matrix->right, &matrix->up, &matrix->at, quaternion->W, quaternion->X, quaternion->Y, quaternion->Z );
}


Сообщение отредактировал binaryuser - Пятница, 06.02.2015, 12:08
CentiuS Дата: Четверг, 14.05.2015, 14:32 | Сообщение # 3
Ignat Bantserov
Сообщений: 398
Статус: Offline
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7210]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
umarmagonedov21 [12:03]

vlabsbd [03:43]

jeffreycollman [23:06]

infait228_aye [20:43]

uradzordan5 [16:32]

Donater192814 [16:30]

ivanpro777ooo [22:18]

FoxyMix [21:38]

pororo39084723 [21:21]

Visionseh [20:29]

Danik_Ursu [15:10]

Gennadii_Bukin [10:04]

ub1xmanager [21:28]