Więc jestem nowy w OpenGL ... Mam ogólną wiedzę na temat programowania gier, ale mało praktycznego doświadczenia.
Zaglądałem do różnych artykułów i książek i próbowałem zagłębić się w OpenGL, ale różne wersje oraz stary i nowy sposób robienia rzeczy były mylące.
Wydaje mi się, że moje pierwsze pytanie brzmi: czy ktoś zna jakieś dane liczbowe na temat odsetka graczy, którzy mogą uruchomić każdą wersję OpenGL. Jaki jest udział w rynku? 2.x, 3.x, 4.x ...
Przyjrzałem się wymaganiom dotyczącym Half Life 2, ponieważ wiem, że Valve zaktualizowało go do OpenGL, aby działało na Macu i wiem, że zwykle próbują trafić do bardzo szerokiej bazy użytkowników i mówią, że przynajmniej GeForce 8 Series. Spojrzałem na 8800 GT na stronie Nvidii i wymieniono wsparcie dla OpenGL 2.1. Co, być może się mylę, brzmi dla mnie starożytnie, ponieważ jest już 4.x. Poszukałem sterownika dla 8800GT i mówi on, że obsługuje 4.2! Trochę rozbieżności, lol.
Przeczytałem także rzeczy, takie jak XP obsługuje tylko do określonej wersji, lub OS X obsługuje tylko 3.2, lub wszelkiego rodzaju inne rzeczy. Ogólnie jestem po prostu zdezorientowany, ile wsparcia jest dostępne dla różnych wersji i jakiej wersji się uczyć / używać.
Szukam również zasobów edukacyjnych. Dotychczasowe wyniki wyszukiwania wskazywały mi na OpenGL SuperBible. Czwarta edycja ma świetne recenzje na Amazon, ale uczy 2.1. Piąta edycja uczy 3.3, a w recenzjach jest kilka rzeczy, które wspominają, że 4. edycja jest lepsza i że 5. edycja nie uczy właściwie nowych funkcji czy coś takiego? Zasadniczo nawet w materiałach do nauki widzę rozbieżności i po prostu nie wiem nawet, od czego zacząć.
Z tego, co rozumiem, 3.x rozpoczął zupełnie nowy sposób robienia rzeczy i przeczytałem z różnych artykułów i recenzji, które chcesz „trzymać się z daleka od przestarzałych funkcji, takich jak glBegin (), glEnd ()”, a jednak wiele książek i tutoriale, które widziałem, używają tej metody. Widziałem ludzi mówiących, że w zasadzie nowy sposób robienia rzeczy jest bardziej skomplikowany, ale stary jest zły>.>
Na marginesie, osobiście wiem, że wciąż muszę się wiele nauczyć, ale interesuje mnie teselacja; więc myślę, że to także ma na to wpływ, ponieważ, o ile rozumiem, to tylko w wersji 4.x?
[po prostu, mój pulpit obsługuje 4.2]
źródło
Odpowiedzi:
Jeśli zastanawiasz się nad zasięgiem OpenGL, dobrym miejscem do rozpoczęcia jest ankieta sprzętowa Steam.
http://store.steampowered.com/hwsurvey?platform=pc
Niestety wydaje się, że jest teraz zepsuty i nie wyświetla żadnych statystyk dla kart wideo. : \
DirectX 9 jest porównywalny z OpenGL 2.1, DirectX 10 z OpenGL 3.0 i DirectX 11 z OpenGL 4.0. Stąd bierze się zamieszanie.
XP obsługuje wszystkie wersje OpenGL, ale nie obsługuje DirectX 10 lub wyższej. W ten sposób Microsoft chciał zmusić ludzi do przejścia na Vistę, ale nie wyszło to zbyt dobrze. OpenGL jest otwartym standardem, więc dopóki producenci kart wideo będą gotowi produkować sterowniki dla XP, będzie obsługiwał nowsze wersje OpenGL.
To bardzo duży problem dla OpenGL. Zasadniczo w dawnych czasach wysyłano rzeczy na kartę wideo za pomocą „trybu natychmiastowego”. Zacznij od
glBegin
, zrób kilka rzeczy, a na końcuglEnd
. Jednak sterowniki karty graficznej nie jak to w ogóle . Skąd mogą wiedzieć, ile rzeczy zamierzasz wysłać? Czy będą to 4 wierzchołki dla teksturowanego kwadratu lub 100 000 dla modelu bez skóry? Dlatego wprowadzili obiekty buforów wierzchołków (VBO). Podczas gdy tryb natychmiastowy jest listą połączoną, VBO jest tablicą statyczną. Deweloper wie, jak duży jest, a kierowca wie, jak duży. Wszyscy są szczęśliwi. Tak więc karta standardów OpenGL (Khronos Group) postanowiła wycofać tryb natychmiastowy dla OpenGL 3.0 i nowszych wersji. Jest to jednak problematyczne, co pokażę na prostym przykładzie.Załóżmy, że chcesz wyświetlić teksturowany quad, zaczynając od zera.
W OpenGL 2.1:
GL_PROJECTION
.GL_MODELVIEW
.GL_TEXTURE_2D
uchwycie.glBegin
...glVertex2f
...glTexCoord2f
...glEnd
.W OpenGL 3.0:
GL_TEXTURE_2D
uchwycie.glDrawArrays
.Co więc może pójść nie tak w pierwszej wersji?
W drugiej wersji możesz mieć problemy z powyższym i :
Bez odpowiednich narzędzi do debugowania staje się to poważnym problemem. Dlatego ludzie mówią, że powinieneś trzymać się trybu natychmiastowego. Na szczęście mamy teraz darmowy i doskonały gDEBugger , ale to nie jest magiczna kula.
Aby odpowiedzieć na twoje pytanie: to zależy od twojej gry. Jeśli chcesz dotrzeć do szerokiego grona odbiorców (na przykład zwykłej gry lub platformówki 2D), powinieneś wybrać opcję 2.1. Jeśli tworzysz epicką grę kosmiczną, która i tak nie będzie działać na sześcioletnim sprzęcie, wybierz cel 3.3. A jeśli potrzebujesz najnowszej i najlepszej kompatybilności w przyszłości, wybierz 4.0.
źródło
Niektóre statystyki dotyczące kompatybilności sprzętowej można znaleźć w ankiecie Steam: http://store.steampowered.com/hwsurvey/ Chociaż wymieniono w niej DX10 i DX11, kompatybilność sprzętowa jest odpowiednio taka sama jak OpenGL 3 i OpenGL 4. Należy jednak pamiętać, że stan instalacji sterownika OpenGL na ludziach jest zwykle gorszy niż DX.
Windows XP nie obsługuje DX10 ani DX11, ale OpenGL 3 i 4 powinny działać poprawnie, pod warunkiem, że sterowniki są w porządku. OSX obsługuje OpenGL 3 (maksymalnie), w systemie Linux dostajesz OpenGL 4 ze sterownikami dostawcy ATI / NVIDIA (oczywiście tylko jeśli sprzęt to obsługuje).
Są też mobilne wersje OpenGL. W rzeczywistości sugerowałbym przyjrzenie się OpenGL ES 2.0, ponieważ jest on mniejszy, więc łatwiej się go nauczyć, ale musisz także skorzystać z nowoczesnych praktyk, tj. Shaderów i VBO. Jest to również używane na większości urządzeń mobilnych (więc możesz robić gry mobilne), a także WebGL jest w zasadzie taki sam, więc możesz właściwie robić całą swoją naukę w przeglądarce internetowej z jego zaletami szybkiego rozwoju. OpenGL ES 3.0 pojawi się tego lata.
Tesselacja to funkcja OpenGL 4.0. Najpierw powinieneś nauczyć się innych rodzajów shaderów, nie mówiąc już o podstawach, ale zgadzam się, że to interesujące - w rzeczywistości napisałem z nim mały test: http://blog.tapiov.net/post/15189341463/playing- z-opengl-4-teselacją
źródło