Программирование 3D-игр в DirectX на Delphi
 
         
    [Главная] [Новости] [Статьи] [Игры] [Проекты] [Автор]  
         
  Теоретические основы 3D-программирования: теоретические и практические основы программирования 3D-игр.  
     
 

О кватернионах

Что такое кватернион?

 
     
 

Кватернион - это четверка чисел (х, y, z, w) при помощи которой задается ориентация модели в 3-х мерном пространстве. x, y и z - задают ось вращения, w - угол вращения вокруг этой оси.

 
     
 

Единичный кватернион - вычисляется следующим образом:

q.x := sin(theta/2) * axis.x;
q.y := sin(theta/2) * axis.y;
q.z := sin(theta/2) * axis.z;
q.w := cos(theta/2);

, где axis - нормированная ось вращения; theta - угол вращения вокруг этой оси (в радианах). Для справки - 90 градусов - это pi/2 радиан (или более оптимизированно в DirectX записывается как DX_PI*0,5).

 
     
 

Если использовать углы Эйлера (рысканье, тангаж, крен - yaw, pitch, roll), то кватернион можно вычислить следующим образом:

qroll := D3DXQuaternion((sin(ay/2), 0, 0), cos (ay/2));
qpitch := D3DXQuaternion((0, sin(ax/2), 0), cos (ax/2));
qyaw := D3DXQuaternion((0, 0, sin(az/2)), cos (az/2));
q := D3DXQuternionMultiply(q, D3DXQuternionMultiply(q, D3DXQuternionMultiply(q, qyaw), qpitch), qroll);

, где ay, ax и az - углы вращений вокруг основных координатных осей - ox, oy, oz (в радианах).

 
     
  Для чего ввели использование кватернионов? Кватернионы занимают меньший объем по сравнению с матрицами - матрица 3х3 - 9 чисел; кватернион - 4. К тому же в D3D используются матрицы 4х4 - т.е. 16 чисел! Для перехода от матрицы к кватерниону и обратно существуют специальные функции - D3DXMatrixRotationQuaternion, D3DXQuaternionRotationMatrix. Композиция - перемножение кватернионов дает результирующую ориентацию. Сама операция переменожения также более эффективна по сравнению с перемножением матриц. Кроме того, кватернионы используются для интерполяции промежуточных кадров анимированных моделей.  
     
  [Назад]  
     
     
     
     
     
     
     
     
    [Главная] [Новости] [Статьи] [Игры]    
         
(c) Мега Информатик 2006-2007    
Hosted by uCoz