2011-07-22

Orientacja obiektu w przestrzeni

Każdy silnik czy to raytracingu czy renderingu umieszczając obiekty w układzie współrzędnych świata wykorzystuje informację o położeniu obiektu i jego orientacji.

Orientację wyznaczają trzy wektory, które wskazują w górę obiektu, w jego bok i naprzód (z reguł jednostkowe i wzajemnie prostopadłe). W tych wektorów i pozycji budujemy dwie macierze świat-obiekt i obiekt-świat, jedna jest odwrotnością drugiej.

Mnożąc punkt świata przez macierz świat-obiekt sprowadzamy go układu współrzędnych obiektu. Z reguły w takim układzie środek układu współrzędnych to środek obiektu.

Tworzenie macierzy transformacji:
private void UpdateTransformationMatrices()
{
    m_local_to_world = Matrix4.CreateTranslation(Pos) *
        new Matrix4(Right, Up, Forward);
    m_world_to_local = m_local_to_world.Inverted;
}
Zwróćmy uwagę, że przy transformacji świat-obiekt najpierw przesuwamy punkt, a następnie go obracamy. Przy transformacji odwrotnej obiekt-świat jest odwrotnie.

Często jest tak, że nasz obiekt zawiera w sobie inne, a one znowu inne, a każdy ma swoje macierze transformacji. Ostateczna macierz transformacji powstaje przez wymnożenie wszystkich składowych macierzy.

Brak komentarzy:

Prześlij komentarz