PMG

Форумы по созданию игр
Текущее время: 15 дек 2024 00:21

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Аналог D3DXMatrixRotationQuaternion
СообщениеДобавлено: 27 сен 2009 19:31 
Не в сети
Любитель
Аватара пользователя

Зарегистрирован: 30 авг 2007 01:36
Сообщения: 39
Откуда: подвал
Решил создать аналог функции D3DXMatrixRotationQuaternion для своей математической библиотечки. Решил использовать формулу найденую в интернете:

public static Matrix4 RotationQuaternion(QuaternionF q)
{
var res = new Matrix4();
res[1,1] = 1.0f - 2.0f * (q.Y * q.Y + q.Z * q.Z);
res[1,2] = 2.0f * (q.X * q.Y + q.Z * q.W);
res[1,3] = 2.0f * (q.X * q.Z - q.Y * q.W);
res[2,1] = 2.0f * (q.X * q.Y - q.Z * q.W);
res[2,2] = 1.0f - 2.0f * (q.X * q.X + q.Z * q.Z);
res[2,3] = 2.0f * (q.Y * q.Z + q.X * q.W);
res[3,1] = 2.0f * (q.X * q.Z + q.Y * q.W);
res[3,2] = 2.0f * (q.Y * q.Z - q.X * q.W);
res[3,3] = 1.0f - 2.0f * (q.X * q.X + q.Y * q.Y);
return res;
}

Но DX функция D3DXMatrixRotationQuaternion() возвращает совсем другой результат! Насколько я понимаю проблема в переводе из RH в LH систему. Код приведенный ниже дает похожий результат, но я не уверен что он правильный.

public static Matrix4F RotationQuaternion(QuaternionF q)
{
var x2 = q.X + q.X;
var y2 = q.Y + q.Y;
var z2 = q.Z + q.Z;
var xx = q.X * x2; var xy = q.X * y2; var xz = q.X * z2;
var yy = q.Y * y2; var yz = q.Y * z2; var zz = q.Z * z2;
var wx = q.W * x2; var wy = q.W * y2; var wz = q.W * z2;

return new Matrix4
(
1.0f - (xx + yy), wx + yz, wy - xz, 0.0f,
wx - yz, (yy + zz) - 1.0f, xy + wz, 0.0f,
wy + xz, xy - wz, (yy - wz) - 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
);

}

Можете помочь? Заранее благодарен.

_________________
Да прибудет с тобой инкапсуляция и полиморфизм.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB