Tuesday, September 30, 2008

Czas na OpenGL :)

Miałem do czynienia z DirectX za czasów DX7. Pamiętam, że z DX8 były problemy (Microsoft Visual Studio się wywalało przy kompilacji i trzeba było ściągać/instalować nową wersję). A z OpenGL... problemów nie było :)

Dlaczego OpenGL? Dlaczego nie DirectX?
Wydajność podobna.
DirectX jest nieprzenośny - ale przyjemny w implementacji.
OpenGL jest przenośny - ale mniej przyjemny w implementacji. Czyżby?
DirectX jest bardziej obiektowy. Jeśli nie używamy klas - wybieramy OpenGL.
DirectX wymaga sprzętu. Jeśli chcemy aby nasz kod można było odpalić bez najnowszej karty graficznej XXX model 999999 - wybieramy OpenGL.
Jeśli chcemy stworzyć małym kosztem grę dla Windows/XBox - wybieramy DirectX.
To tylko wierzchołek góry lodowej :D

Jak?
Właśnie czytam najnowszą specyfikację jeszcze nie zaimplementowanego OpenGL 3.
OpenGL nie ma wbudowanej obsługi plików ani podobnych. Wymaga nieco więcej pracy. Ale w zamian daje większą kontrolę.
Istnieją biblioteki GLU, GLUT, GLX. Dają... sporo. Ale można się obejść i bez nich.
Zaleta (?) OpenGL to nie-klasowy interfejs. Wywołujemy procedury/funkcje i tyle.
W DirectX tworzymy interfejsy, klasy, rozszerzamy je.... i gubimy się w klasach jeśli nie mamy języka obiektowego (np. MASM32).
Za czasów DX8 należało stworzyć interfejs DX5, później DX6, później DX, DX8.... koszmar. Ale poprawili się.
A OpenGL... on działa :)

Brak ci wiedzy i umiejętności? Zacznij z OpenGL - start jest łatwiejszy.

Masz wiedzę i umiejętności? Baw się z DirectX.

Masz duże wiedzę i umiejętności - wróć do OpenGL - daje możliwości takie same jak DirectX, lecz jest przenośny i fajniejszy.

W planach mam jakiś krótki tutorial o OpenGL. Na razie sam czytam i uczę się. Ale może kilak drobiazgów.

1. Aby zachować aktualny "stan świata" używany pushmatrix i popmatrix.

2. Aby stworzyć nowy obiekt (2D lub 3D) tworzymy świat i go konfigurujemy, po czym wpisujemy w BEGIN(); ... END(); kod tworzenia obiektów 3D. Wybór typów obiektów jest szeroki. Ustawiamy vertexy (trójwymiarowe położenia pixeli) oraz ich kolor (odpowiednik 2D to kolor piksla). Dodatkowo możemy ustawić mgłę czy też teksturę. Kolor to PrimaryColor i SecondaryColor. Kolor może się składać np. z wartości RGBA (Red, Green, Blue, Alpha - RGB pozwala wybrać dowolną barwę a wartość A przezroczystość obiektu). I wektory normalne do powierzchni - czyli informacje o tym, jak się od obiektu odbija światło.

3. Chyba już i tak wystarczająco skomplikowałem. Starczy na dziś :)

No comments: