wtorek, 31 marca 2009

error: variable `Math::Quaternion x; has initializer but incomplete type

Bardzo ciekawy błąd. Klasa ma inicjalizator, ale typ nie kompletny. Cóż to może znaczyć ?
Sprawa jest dosyć prosta. Klasa kwaternionu jest klasą zaprzyjaźnioną z klasą macierzy. Czyli mamy mniej więcej taki zapis w pliku Matrix.hpp:
class Quaternion;

class
Matrix
{

friend class
Quaternion;
...
};
Jest to przydatne przy tworzeniu macierzy rotacji z kwaternionu.
No ale gdzie błąd ? Otóż w miejscu w którym korzystałem z kwaternionów był włączony plik Matrix.hpp, ale plik Quaternion.hpp już nie. Nie było potrzeby umieszczać tego nagłówka w macierzy, więc tego nie zrobiłem.

No ale skoro już mowa o kwaternionach, to znaczy, że robiłem coś z rotacjami. Tak, zrobiłem prosty kontroler kamery. Można sobie teraz polatać po scenie. Koniec z re kompilacją po byle zmianie położenia kamery :)

Zrobiłem też trochę cienie. Działają poprawnie światła spot i omni. Kierunkowych nawet nie sprawdzałem.

Dodałem też proste oświetlenie per pixel.
123


Cube shadow mapa średnio poprawnie wyświetla się na moim GF 7600. Jednak na kartach z serii 8xxx widać poprawnie jedną ze ścianek.

Brak komentarzy: