Jakie są dobre zasoby edukacyjne do OpenGL? [Zamknięte]

88

Od jakiegoś czasu korzystam z OpenGL ES na iPhonie i po prostu czuję się zagubiony na zewnątrz dzięki niewielkiemu zestawowi poleceń, które widziałem w przykładach i które zastosowałem jako własne. Chciałbym używać OpenGL na innych platformach i dobrze go rozumiem.

Za każdym razem, gdy szukam książki, znajduję OGROMNE Biblie, które wydają się nieciekawe i bardzo trudne dla początkującego. Gdybym miał kilka weekendów na naukę OpenGL, jaki byłby najlepszy sposób spędzenia czasu (i pieniędzy)?

DFectuoso
źródło
12
Nienawidzę tego mówić, ale OpenGL Superbible lub redbook OpenGL to najlepszy sposób na naukę OpenGL. To złożony temat, więc książka musi być duża.
Rachel Blum,
6
Czy jest to możliwe nawet dla początkujących?
DFectuoso

Odpowiedzi:

36

Zachowaj ostrożność, gdy spojrzysz na samouczki OpenGL, ponieważ wiele z nich (NeHe) po prostu uczy Cię rzeczy, których nie powinieneś już robić. Dzisiejszy OpenGL to inna bestia niż 10 lat temu.

Kilka fajnych przykładów unikania przestarzałych rzeczy można znaleźć tutaj: http://www.g-truc.net/post-tech-content-sample.html

Pakiet próbek OpenGL 4.0.1.0 to aktualizacja, która zwiększa liczbę próbek do 58 próbek; w tym 13 próbek OpenGL 4, 33 próbki OpenGL 3.3 i 12 próbek OpenGL 2 dla Visual Studio 2008 i 2010 w 32 i 64 bitach.

NocturnDragon
źródło
Łączy się z górą!
user14170
65

Jest wiele rzeczy, z których możesz się nauczyć. Oto moje zdanie na temat każdego z nich, z perspektywy kogoś nowego w OpenGL.

Przykłady OpenGL

Istnieje wiele przykładowych kodów, które możesz przeczytać. Przykłady G-truc są dość obszerne i obejmują wiele zaawansowanych funkcji.

Jednak jeśli jesteś początkujący , uczenie się na przykładach jest okropnym sposobem na naukę. Czytanie kodu, którego tak naprawdę nie rozumiesz, nie nauczy Cię, dlaczego to działa. Rzeczywiście, tekst na powyższej połączonej stronie wyraźnie i słusznie stwierdza, że ​​przykłady nie są dla początkujących.

Uczenie się na samym kodzie źródłowym, chyba że jest mocno komentowane (w tym momencie jest to samouczek), nie jest łatwe. Próba tego zachęca do programowania w stylu kultowego ładunku oraz kodowania kopiuj i wklej. Bardzo łatwo jest przekonać się, że rozumiesz, jak coś działa, kiedy wszystko, co naprawdę robisz, to po prostu kopiowanie kodu z jednego miejsca do drugiego. Możesz być w stanie mieszać i dopasowywać rzeczy, ale prawdziwe zrozumienie jest trudne do osiągnięcia bez odpowiedniego materiału instruktażowego.

Książki OpenGL

Istnieje wiele rzeczywistych książek do kupienia dla rozwoju OpenGL. Opowiem o dwóch największych tutaj.

OpenGL Redbook

Ten jest nieco problematyczny z czysto praktycznego punktu widzenia. Zobacz, siódma edycja obejmuje GL 3.0 i 3.1. Który jest raczej stary. Od tego czasu do OpenGL dodano wiele przydatnych funkcji, które zmieniają sposób pisania. I nie wszystkie z nich są funkcjami sprzętowymi.

Ósma edycja pojawi się „wkrótce” i obejmie 4.1. Nie ma słowa na temat tego, czy obejmuje on stare rzeczy o stałej funkcji.

Powiedziałbym, że ta książka jest OK. Największym problemem jest organizacja informacji. Bardziej przypomina obszerną instrukcję obsługi niż książkę stworzoną do nauki. Oto co mam na myśli.

Jedną z najważniejszych rzeczy, które należy robić podczas nauczania, jest nie obciążanie ucznia nieistotnymi informacjami. Ale Redbook właśnie to robi. Wprowadzając materiał, wprowadza dużo materiału. Wiele z nich jest zbędnych w stosunku do bieżącego zadania.

To, o czym mówisz i kiedy mówisz, ma kluczowe znaczenie dla uczynienia twojej książki dobrym źródłem do nauki. Redbook nigdy nie zatrzymuje informacji przed bardziej odpowiednim czasem. Kiedy mówi o tym, jak narysować trójkąty i prymitywy, mówi o wszystkim o ich rysowaniu naraz. Obejmuje każdą opcję, każdą funkcję, każdy parametr itp.

To nie jest dobra organizacja informacji.

OpenGL Superbible

Piąte wydanie tej książki obejmuje tylko rdzeń GL 3.x, więc nie ma stałej funkcji.

Jednak ogólna organizacja książki jest mniej więcej taka sama jak organizacja czwartej edycji. Wydaje się to niemożliwe, ponieważ czwarta edycja używała stałej funkcji i wprowadziła shadery dopiero dużo później.

Sposób, w jaki to zostało osiągnięte, to moja pierwsza skarga na książkę. Zasadniczo autor zbudował bibliotekę, która implementuje formę OpenGL o stałej funkcji. Obejmuje VAO, obiekty buforowe, shadery i różne inne rzeczy, dzięki czemu może dostać się do rysowania obiektów, matematyki macierzy i tekstur bez konieczności mówienia o takich rzeczach, jak szczegółowo działa potok GL.

Ukrywanie wszystkich tych szczegółów ułatwia trawienie materiału. Ale często zobaczysz ludzi odchodzących od Superbible, którzy nie wiedzą, jak właściwie funkcjonować bez biblioteki. Naprawdę nie rozumieją, w jaki sposób shadery łączą się z obiektami buforowymi, jak przepływają dane w potoku itp.

Jest to przydatna książka, bardziej niż Redbook. Jeśli wszystko inne zawiedzie, wykona zadanie. Ale myślę, że może być lepiej.

Ponadto, według niektórych recenzentów, wydaje się, że brakuje pewnych przydatnych informacji, takich jak pakowanie danych atrybutów przy użyciu znormalizowanych wartości i tym podobnych.

Materiały online OpenGL

Istnieje wiele materiałów online, z których można się uczyć.

Poradniki NeHe

Samouczki NeHe , jak stwierdzili inni, są bardzo nieaktualne. Koncentrują się na OpenGL o stałej funkcji. Często mówi się, że łatwo jest nauczyć się GL o stałej funkcji, co jest prawdą. Ale to nie jest dobry pomysł.

Zrozumienie, jak naprawdę działa potok o stałej funkcji, jest trudne. Posunąłbym się nawet do stwierdzenia, że ​​jest to trudniejsze niż nauka shaderów. Gdy go zdobędziesz, shadery są proste. Zrozumienie zawiłości tekstur, elementów łączących itp. Jest bardzo trudne i wymaga częstych wizyt w dokumentach referencyjnych, aby upewnić się, że wszystko jest poprawnie skonfigurowane. Nawet jeśli wszystko rozumiesz poprawnie, łatwo jest popełnić mały błąd, który powoduje, że wszystko się psuje.

Różnica polega na tym, że możesz sprawić, by funkcje o stałej funkcji działały bez ich zrozumienia. To zachęca do programowania kultowego ładunku. Umożliwia wyświetlanie czegoś na ekranie, nie wiedząc, co się robi. Na forach OpenGL.org ciągle pojawiają się pytania dotyczące drobiazgów otaczających funkcję o stałej funkcji, od ludzi nie znających działania gluLookAt, przez trudności z oświetleniem, po ludzi, którzy próbują uzyskać szczególny efekt w pracy ze środowiskiem tekstur.

Więc nie, nie sądzę, że NeHe to dobry sposób na naukę OpenGL.

Powyższy komentarz może być wykorzystany do każdego samouczka nie shadera, takiego jak Swiftless , Lighthouse i tak dalej.

Programowanie OpenGL Wikibook

Programowanie OpenGL Wikibook jest prawdopodobnie nowoczesnym odpowiednikiem NeHe. Obejmuje GL w wersji 2.1, ponieważ chcą, aby był on odpowiedni dla platform mobilnych. Jeśli to dla Ciebie ważne, to spójrz tutaj.

Innym problemem związanym z NeHe, a tym samym Wikibook, jest duży nacisk na kod źródłowy. Stosunek tekstu do kodu jest bardzo mały; jest dużo kodu, ale tekst tak naprawdę nie wyjaśnia, jak to wszystko działa.

Na przykład spójrz na dół do samouczka 2. Wprowadza mieszanie. Nie mówi, jak działa mieszanie. Nie mówi, co glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)właściwie oznacza lub robi. Mówi tylko: „Oto kod, który czyni przejrzystość”.

To nie jest najlepsze środowisko do nauki.

Niekompletne samouczki

Swiftless posiada zestaw OpenGL 4.x samouczków . Durian Software ma również kilka samouczków opartych na modułach cieniujących OpenGL . I są tutoriale „OpenGLBook.com” .

Łączy je to, że są niekompletne i porzucone. Wszyscy dostali około 4-5 samouczków, a następnie zostali upuszczeni. Żadne z nich nie dotarło do teksturowania, oświetlenia itp. Cóż, Durian trafił w teksturę, ale nie zapalił.

Wiele można z nich czerpać, ale brakuje również wielu rzeczy.

Bezwstydna autopromocja

Przegląd moich własnych samouczków poświęconych nowoczesnej grafice 3D byłby strasznym konfliktem interesów. Zamiast tego będę mówić o organizacji stojącej za nimi i dlaczego uważam, że są dobrzy.

No i tak, pracuję nad samouczkiem 17. Projekt nie jest martwy.

Pierwsze trzy rozdziały naprawdę mówią o tym, jak działa potok OpenGL. Superbible zawiodło, ponieważ próbowało ukryć szczegóły. Zamiast tego staram się wyjaśnić te szczegóły naprawdę, bardzo dobrze. Wielokrotnie. Wprowadzenie wyjaśnia potok w postaci zwykłego tekstu. Pierwszy samouczek wyjaśnia to z towarzyszeniem kodu. Drugi samouczek jeszcze bardziej ją odwiedza.

Stamtąd naturalnie przechodzę do pozycjonowania obiektów. To wprowadza mundury, ale nie chciałem jednocześnie blokować mundurów i projekcji perspektywicznej. Oddzieliłem więc dwa pojęcia. Po projekcji buforowanie głębokości wydawało się rozsądnym następnym krokiem, po którym następowały działania transformacji i macierzy. Potem kamery. Rotacja z czwartorzędami była późnym dodatkiem, ale uważam, że była to ważna sprawa dla początkującego programisty grafiki.

Samouczki dotyczące oświetlenia ponownie budują jeden na drugim. Rozproszone, następnie oświetlenie poszczególnych fragmentów, a następnie lustrzane. Zakres dynamiczny był interesującym wyborem. Większość materiałów wprowadzających stara się trzymać z dala od tego, ale zgadzam się z tym. Nie jesteś programistą grafiki, jeśli uważasz, że natężenie światła zawsze mieści się w zakresie [0, 1]. W dzisiejszych czasach nie jesteś programistą graficznym, jeśli nie wiesz, jak utrzymać liniowy potok kolorów.

Ostatni w oświetleniu, na oszustach, był dziwny. Staram się projektować samouczki, które rozwiązują problemy, a nie tylko pokazują niektóre funkcje OpenGL, szczególnie w miarę rozwoju książki. Tak wiele z mojego projektu samouczka pochodzi ze znalezienia sposobów mówienia na określone tematy, jednocześnie czyniąc je prawdziwymi problemami i nie jest oczywiste, „uczymy się teraz X”. Shadery geometrii są trudne, ponieważ tak naprawdę nie rozwiązują bardzo wielu problemów.

Oszuści reprezentowali problem, który GS faktycznie byli przydatni do rozwiązania. Pozwoliło mi to także mówić o innych mniej używanych rzeczach, takich jak discardzmiana głębokości fragmentu. I naprawdę pokazuje moc shaderów: możesz sprawić, że płaski kwadrat stanie się kulą.

Interesujące są również samouczki teksturowania. Jednym z powodów, dla których odkładałem mówienie o rozproszonych teksturach kolorystycznych, aż do trzeciego, aby przez jakiś czas nie mówić o teksturach sRGB. W ten sposób mogłem porozmawiać o podstawowych kwestiach związanych z teksturami (ładowanie danych, umieszczanie ich w modułach cieniujących, filtrowanie, blokowanie itp.) Bez konieczności zajmowania się kwestiami liniowymi. Więc mógłbym poświęcić cały samouczek na ten temat. To pozwoliło mi naprawdę, naprawdę podkreślić, jak ważne jest utrzymanie liniowego strumienia kolorów.

To jedna z moich domowych gadek.

Nicol Bolas
źródło
1
Właśnie zacząłem czytać książkę / kod źródłowy, i to jest niesamowite ... dziękuję bardzo za udostępnienie tego za darmo!
Alex Coplan,
Chociaż jestem facetem od telekomunikacji, po prostu próbowałem twoich tutoriali. I są naprawdę mili dla początkujących. Jedyną rzeczą jest to, że nieoficjalny opengl sdk nie może być poprawnie zbudowany z Ubuntu12.04 + Eclipse. Czy jest jakiś sposób, za pomocą którego możemy go bezpośrednio zainstalować? (Tak jak robimy to dla GL, GLEW, GLU, glut itp.)
iammilind 21.09.12
@iammilind: „ nie można poprawnie zbudować” W jaki sposób kompilacja kończy się niepowodzeniem? Ponadto nie ma „instalowania”; to połowa punktu. Jest to mechanizm kopiowania / wstępnego pobierania i uruchamiania bez instalacji systemu, zależności, PPM ani żadnych innych rzeczy, których nie rozumiem ani nie mam pojęcia, jak korzystać z Linuksa. Umieszczasz go tam, gdzie chcesz, a nie tam, gdzie według twojego systemu powinien się udać.
Nicol Bolas,
1
W Ubuntu niestety proces kompilacji kończy się niepowodzeniem na preamakesamym etapie :( ... Będzie to bardzo pomocne, jeśli w wolnym czasie możesz spróbować wykonać samouczki dotyczące kodu za pomocą Ubuntu + Eclipse. Na razie w inny sposób podążam jest wykorzystanie dostarczonego materiału do czytania i powiązanie go z innymi samouczkami dotyczącymi kodu. Powodem jest to, że widziałem „arcyntezę”, najlepsze do tej pory miejsce w sieci do nauki OpenGL dla początkujących.
iammilind 21.09.12
@iammilind: Zauważyłem, że nie zgłosiłeś błędu. Jak można oczekiwać, że te rzeczy zostaną naprawione bez nich?
Nicol Bolas,
8

Moją jedyną książką na temat OpenGL jest „OpenGL SuperBible, 4. edycja”, a 5. wydana zostanie za kilka tygodni. Myślę, że jest to dobre zarówno dla początkujących, jak i zaawansowanych programistów.

Edycja: Dodam, że nie wybieraj najnowszych trendów technologicznych, jeśli tylko uczysz się programować. Szanse są, gdy staniesz się ekspertem posługującym się jedną metodologią, właśnie wydano 5 nowych interfejsów / wersji. Wygląda na to, że widzieliśmy, jak shadery pojawiają się co 3 miesiące. Wybierz więc najlepszą dokumentację (ogólnie prymitywne), stwórz kilka programów i stopniowo posuwaj się naprzód, ponieważ bardziej niż prawdopodobne, że w przyszłości wpadniesz na starszy kod. Mam nadzieję, że to pomoże!

Phil
źródło
Przechodzę teraz do tego, co znakomite, i jest naprawdę dobre dla ludzi, którzy nie mają tła graficznego, ponieważ wyjaśnia wszystkie pojęcia w miarę postępów.
Spidey
5

Jak zwykle najlepszym sposobem na naukę jest zrobienie tego. Wstrzymałbym się od wydawania pieniędzy, chyba że uważasz, że naprawdę korzystasz z podręcznika do czytania, większość (jeśli nie wszystkie) informacje można znaleźć w Internecie. Oprócz nauki OpenGL możesz odświeżyć swoją Algebrę Liniową, to nigdy nie boli.

Dużym problemem, z którym się spotkałem, jest wiele rzeczy, które zostały osłabione w najnowszej wersji OpenGL.

Najlepsze źródło, jakie udało mi się znaleźć, znajduje się na blogu Joe . Najlepiej jest przedstawić nowoczesny potok i przedstawić kilka przykładów w bardziej czytelny sposób niż to, co udało mi się znaleźć gdzie indziej. Wygląda na to, że Nehe ostatnio aktualizuje parę i chociaż ich lekcje są jeszcze stare, niektóre wiadomości mogą być interesujące. Lazy Foo ' był również świetnym źródłem informacji, ale podobnie jak Nehe, jego tutoriale wykorzystują deprecjonowany materiał.

Myślę, że po weekendzie lub 2, kiedy już poczujesz się komfortowo, idź i zrób mały projekt, aby zastosować wszystko. Breakout lub tetris - coś, w czym możesz skoncentrować się na samym kodzie. Uczysz się o wiele więcej, kiedy idziesz i próbujesz wykonać rzeczywisty projekt, bez względu na to, jak proste.

cmjreyes
źródło
3

Najlepszym sposobem na naukę OpenGL jest jego użycie. Poleciłbym napisać własny silnik. To może wydawać się zniechęcającym zadaniem i tak jest. Twój pierwszy silnik nie będzie zbyt dobry, ale wiele się nauczyłeś.

Zasadniczo: napisz silnik, użyj go do gry, dowiedz się, co ci się nie podoba, i przepisz go. Rób to dalej, a będziesz lepszy w OpenGL. :)

Czego będziesz potrzebować:

  • Niektóre sposoby ładowania modeli (.obj)
  • Jakiś sposób ładowania tekstur
  • Oświetlenie w strumieniu funkcji stałej lub w module cieniującym
  • W przypadku nieco bardziej skomplikowanych scen niż czajnik na ekranie, wykres sceny
  • Wiele drobnych narzędzi (klasa wektorowa 3d, klasa czwartorzędowa, klasa kamery, menedżer scen itp.)

To już dużo pracy.

knight666
źródło
Czy możesz wskazać mi jakąkolwiek dokumentację dotyczącą podstawowej architektury lub komponentów, które powinien posiadać „pierwszy silnik”? To może wydawać się dobrym sposobem na zabrudzenie moich rąk otwartym gl ...
DFectuoso
gamedev.net/reference/list.asp?categoryid=45#200 Artykuł „Enginuity”.
Egon
4
-1 Pisanie silników jako sposób na wejście w gamedev nie jest zbyt dobry. Na przykład nie wiesz, co włożyć do silnika. scienceninja.com/blog/write-games-not-engines
Kaczka komunistyczna
@TheCommunistDuck SADLY, scienceninja już nie ma. link web.archive
bobobobo
2

Nauczyłem się opengl, pisząc „prostą” grę: 3D Tetris !

Spróbuj stworzyć własną prostą grę / aplikację:

  • Asteroidy
  • Pong
  • Prosty boczny scroller (możesz nauczyć się ładować modele dla gracza / wrogów. Nie masz żadnych? Użyj modeli Quake)
  • Generator terenu 3D

Zrób coś prostego, co Cię interesuje!

Bryan Denny
źródło
2

Robimy trochę OpenGL (ES) w naszej grze Orchard's Craps na iPhone'a, ale był obsługiwany przez programistę z szalonymi umiejętnościami 3D. Z tego powodu uczyłem się OpenGL (ES), aby wiedzieć, o czym mówię i aby móc pisać razem z zespołem.

Jedną z witryn, które uznałem za pomocne, z serią samouczków, jest blog Jeffa LaMarche'a: http://iphonedevelopment.blogspot.com, a tutaj jest link do jego postów na OpenGL: http://iphonedevelopment.blogspot.com/2009/05/ opengl-es-from-ground-up-table-of.html

A z OpenGL.org są dwa przydatne linki: http://www.opengl.org/code/ i http://www.opengl.org/resources/features/

Najlepszy sposób został wspomniany powyżej kilka razy. Wskocz i zrób coś małego, interesującego, i wspinaj się. Chodzi o zrozumienie sceny, aparatu i materiałów (shaderów). Po zapoznaniu się z tymi koncepcjami możesz zacząć patrzeć na silniki fizyki, wykrywanie kolizji, efekty cząstek i tym podobne. Woot! (^_^)

Powodzenia we wszystkich twoich wysiłkach, Kevin

Kevin Bomberry
źródło
2

No cóż, nikt nie mówił o Przewodniku programowania OpenGL , nie mam tej konkretnej edycji, ale starsze były całkiem dobre.

Frédérick Imbeault
źródło
1
Powiedz mi więcej o tym, proszę. Zastanawiam się, jak to jest lepsze / różne od super biblii i czy warto poświęcić czas na przeczytanie tak dużych książek (bez obrazy, ale jeśli przeczytanie książki zajmie ponad 20 godzin, chcę mieć pewność, że warto =))
DFectuoso,
2

http://www.opengl-tutorial.org/

Zawiera tutoriale dotyczące „nowoczesnego” OpenGL (rdzeń 3.0 / 4.0, np. Nie uczy się przestarzałych rzeczy (takich jak glBegin / glEnd)). Chociaż samouczki używają shaderów, podstawy są szczegółowo wyjaśnione, tworząc po drodze solidne podstawy matematyczne. Tekst jest ładnie uzupełniony próbkami kodu * i pomocnymi wizualizacjami.

Samouczki dla średniozaawansowanych obejmują np. Korzystanie z Quaternions lub Lightmaps .

. * glm jest używany jako biblioteka matematyczna

Exilyth
źródło
1

Zwróć uwagę, że najlepszym sposobem na naukę OpenGL jest zorientowanie na zadania . Spróbuj coś zrobić (np. Dodaj funkcję do gry), a następnie sprawdź, co jest do tego potrzebne .

Podręczniki i samouczki są naprawdę nudne bez większego kontekstu - tj. Coś poza samouczkiem, który chcesz osiągnąć samodzielnie.

Bobobobo
źródło
-1

Zacznij od NeHe, aby szybko wyświetlić swój pierwszy trójkąt na ekranie. Wykonaj kilka samouczków dla początkujących, aby zrozumieć podstawowe pojęcia dotyczące programowania 3D. Jeśli, jak sugerujesz, wspominając o OpenGL ES, znasz już podstawy programowania 3D (czym są matryce, do czego służą, w jaki sposób różne matryce są używane do wyświetlania wierzchołków na ekranie, jakie są wierzchołki itp.), to sugeruję, żebyś wcale nie marnował czasu z NeHe, ponieważ może to cię spowolnić (ucząc cię rzeczy, które musisz później „oduczyć”).

Poza tym zgadzam się, że najlepszym sposobem, aby się tego nauczyć, jest działanie. Pierwszym dobrym projektem, który nie jest cześć, może być gra 2D (lub silnik gry 2D). Korzystanie z nowoczesnych aplikacji OpenGL dla 2D może nauczyć cię wielu istotnych pojęć (na przykład użycie bufora i modułu cieniującego) i będzie mniej zniechęcające niż projekt 3D. Następnie możesz zastosować to, czego nauczyłeś się podczas tworzenia aplikacji 3D.

Janis Kirsteins
źródło
NeHe jest przestarzały. Ponadto, chociaż tworzenie sztuki jest łatwiejsze i zajmujesz się głównie teksturowanymi quadami, istnieje wiele przypadków narożnych (np. Wektorowy krzyżowy produkt), które utrudniają pisanie gry 2D przed napisaniem gry 3D. Gry z grafiką 3D, ale rozgrywka 2D (np. Pong, Breakout, ...) mogą być łatwiejsze niż gry 2D / 3D.
Exilyth
-4

Cóż, ciągle mi powtarzano, że tutoriale Nehe są najlepsze, myślę, że będą pasować również dla ciebie! http://nehe.gamedev.net/ Kupiłem czerwoną książkę ...

gokoon
źródło
To wygląda na zabawny zestaw małych kawałków od zera do świetnego miejsca, dzięki!
DFectuoso
2
Muszę zdecydowanie się nie zgodzić. Tak, samouczki NeHe istnieją już od dłuższego czasu, ale nigdy nie miały bardzo dobrego stylu i są już dość przestarzałe.
Andreas
8
-1 Nehe jest zbyt przestarzały.
Axel Gneiting
7
-1. Nauczyłem się wszelkiego rodzaju złych rzeczy od nehe!
Gabriel Isenberg,
-1. NeHe powinien oznaczyć swoje samouczki jako przestarzałe i nieaktualne.
Quazi Irfan