|
|
|
Wstep do OpenGL
Piotr Smirnow
Informacje dotyczące lekcji
Wszystkie lekcje są napisane w języku C. Wybrałem język C, ponieważ jest on łatwy do przyswojenia i zrozumiały dla obu obozów programistów - C / C++. Kod źródłowe zamieszczane pod każdą z lekcji są właśnie w C. Programy pisze i kompiluje dla win32 korzystając z Visual C++ 6.0.
Kod zawarty w lekcjach HTML jest tylko przykładowy. Nie polecam wycinać go bezpośrednio w WWW i wykorzystywać we własnych produkcjach. Kod źródłowy zamieszczany pod lekcjami w postaci spakowanej WinRar'em jest w pełni działający. Możecie go spokojnie wykorzystywać do własnych produkcji.
Pod każdą z lekcji będzie spis użytych funkcji OpenGL wraz z dokładnym opisem każdego z parametrów i tym co dana funkcja robi.
Co to jest OpenGL?
OpenGL to API (Application Program Interface) "programowy interfejs sprzętu graficznego". Jest to biblioteka przeznaczona do tworzenia trójwymiarowej grafiki, bardzo szybka, potężna i niesamowicie prosta w obsłudze. Równie wielką zaletą OpenGL jest przenośność kodu na inne platformy. OpenGL istnieje na wszystkich (no prawie) systemach operacyjnych. W OpenGL zastosowano technologie stworzone przez Silicon Graphics (SGI).
OpenGL jest przeznaczony do używania w systemach wyposażonych w sprzętowe akceleratory grafiki 3D wspomagające OpenGL. Istnieje także programowa biblioteka OpenGL, jednak ustępuje ona prędkościom wersji sprzętowej i nie polecam jej używania.
Kolejne wersje OpenGL pojawiają się rzadko, bo raz na kilka lat. Nie oznacza to, że OpenGL nie oferuje nowych C00L efektów. Jedną z ciekawszych możliwości OpenGL to rozszerzenia "GL EXTENSIONS". Najprościej mówiąc są to dodatki do standardowej biblioteki OpenGL dostarczone przez producentów chipów graficznych.
Dla domowych systemów komputerowych dostępne jest wiele kart wspomagających generowanie grafiki przy pomocy biblioteki OpenGL. Producenci tacy jak NVidia, 3Dfx, S3, Matrox od dawna wyposażają swoje chipy graficzne w obsługę OpenGL. Według mnie najlepszymi kartami do OpenGL są karty oparte na chipach firmy NVidia. Począwszy od Riva TNT / TNT 2 a na G-Force 2 kończąc. Nie polecam wam kart na chipach 3Dfx. Może są on szybsze niż kości NVidia (oczywiście nie szybsze od G-Force / G-Force 2), ale prędkość uzyskują przez wprowadzenie uproszczeń / ograniczeń w generowaniu grafiki 3D. Np. Voodoo 3 mimo że jest na AGP nie korzysta z pamięci ram do ładowania tekstur. Co więcej tekstury mogą mieć maksymalny rozmiar 256x256 !!. Chipy NVidia potrafią obsłużyć tekstury nawet 1024x1024 !!. Voodoo 3 generuje grafikę 3D w 22 bitach, a TnT / Tnt 2 ... w 32 bitach !!!. Wybór jest prosty. NVidia rządzi jeżeli chodzi o OpenGL. W dzisiejszych czasach (akceleratory T&L) prędkość jednostki centralnej CPU nie jest tak ważna jak kiedyś. Teraz wszystkie operacje związane z grafiką wykonują chipy graficzne zamieszczone na karcie (np. G-Force / G-Force 2). Ja sam pracuje na K6-2 350 MHZ, 128 MB Ram, Tnt-2. Jedyną zmianę jaką planuję to kupno dysku twardego większego niż 10 GB.
Czego nie potrafi OpenGL ?
Wiele osób sądzi, że OpenGL to gotowy engine 3D. Myślą, że wystarczy napisać glPlayScene("scena.3ds") i już OpenGL ładuje scenę z pliku 3d Studio, zaczyna ją renderować i inne takie. To bzdura !!!. Jak pisałem wcześniej OpenGL to biblioteka graficzna wspomagająca podstawowe funkcje takie jak rysowanie wielokątów, cieniowanie, oświetlenie, przezroczystość ... . Żeby napisać 3D engine trzeba to wszystko połączyć do kupy !!!.
OpenGL nie potrafi otwierać / zamykać okien graficzny. Oznacza to, że np. w Win32 sami będziemy musieli napisać kod otwierający okno naszej aplikacji, opcjonalnie widok na pełny ekran lub w oknie ... . Następnie korzystając z specjalnych funkcji "podpinamy" OpenGL pod nasze okno i jesteśmy gotowi do renderowania grafiki :). Problem pojawia się, kiedy chcemy żeby nasza aplikacja uruchamiała się na wielu systemach operacyjnych. Zamiast pisać kod odpowiadający za tworzenie okna do renderowania, możemy skorzystać z biblioteki GLUT. GLUT jest zbiorem funkcji, które załatwiają za nas całą brudną robotę związaną z tworzeniem okna !!!. Dzięki GLUT programy pisane pod win32 (z wykorzystaniem GLUT) będą się kompilować np. w Linuxie bez zmiany ani jednej linii kodu !!!!.
Dlaczego wybrać OpenGL a nie Direct3D ?
W mojej karierze programisty grafiki komputerowej zetknąłem się z Direct3D i OpenGL. Wybrałem OpenGL, ponieważ jest prostszy i oferuje OGROMNE możliwości. Direct3D jak i cały directX jest bardzo dziwny w obsłudze i nie przypadł mi do gustu. Po drugie programując w OpenGL twój program może być udostępniany w każdym systemie operacyjnym, gdzie jest OpenGL. Direct3D jest tylko w win9x / NT / 2000. Jako ciekawostkę chce podać, że zespół projektujący Direct3D chce zmienić całkowicie dotychczasowy wygląd Direct3D i upodobnić go do OpenGL ;). To chyba wam wystarczy (bo mi na pewno) jako dowód które API jest lepsze. Nie mówię, że Direct3D jest do kitu. Ja po prostu wybrałem OpenGL i nie żałuję swojego wyboru nawet przez chwilę !!!!. hehe ... Jakiego API do renderowania grafiki używa Quake 1 / 2 /3 ?.
Kim jest Piotr Smirnow aka EclipSe ?
Jestem zwykłym szarym ludkiem, który zainteresował się programowaniem OpenGL. Moją karierę programisty rozpocząłem gdy miałem 13 lat. Pisałem wtedy w Turbo Pascalu. Następnie był C / C++ i tak już zostało. Pisze dla win32, moim zainteresowaniem jest grafika 3D (ale to chyba oczywiste). Mój sprzęt to nic ciekawego bo mam K6-2 350 MHZ, 128 MB RAM, NVidia Riva TnT-2 32 MB, 2.5 GB HDD, Monitor 14", SB 128 PCI . Programy OpenGL chodzą na tym sprzęcie całkiem spoko, karta Tnt 2 jest super.
Piotr Smirnow
Tekst pochodzi ze strony http://opengl.si.pl - Portal Technologii OpenGL
|
 
|
|