Dobre zasoby do nauki nowoczesnego OpenGL (3.0 lub nowszy)? [Zamknięte]

73

Natrafiam na poszukiwanie dobrego zasobu, aby zacząć od OpenGL (3.0 lub nowszy). Znalazłem wiele książek, ale żadnej z nich nie można uznać za dobry zasób!

Oto dwa przykłady:

Przewodnik po programowaniu OpenGL (wydanie siódme) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 To jest PEŁEN przestarzałego materiału! Prawie każdy rozdział zaczyna się od notatki na ten temat.

OpenGL Superbible (wydanie 5) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 Ta książka wykorzystuje bibliotekę stworzoną przez autora do wyjaśnienia głównych argumentów, ukrywając to, czego chcesz się nauczyć! Nie chcę się uczyć korzystania z biblioteki! Chcę się nauczyć OpenGL!

Mam nadzieję, że rozumiesz, że to nie to samo pytanie jak „hej, nie mogę korzystać z Google ... powiedz mi, jak się uczyć OpenGL”. Właśnie skończyłem pełne i głębokie wyszukiwanie, ale nie mogę znaleźć dobrego i kompletnego zasobu, aby nauczyć się „nowego” OpenGL, unikając przestarzałych tematów.

Czy ktoś może skierować mnie we właściwym kierunku? Znam C ++ i mam 10-letnie doświadczenie w programowaniu ... gdzie mogę znaleźć dobry zasób ?! Chcę spędzać na tym czas i chcę się głęboko uczyć.

MatterGoal
źródło

Odpowiedzi:

69

Zgadzam się na powyższe książki z kilkoma notatkami:

  • Przewodnik po programowaniu OpenGL 8 jest już dostępny i został przerobiony dla nowoczesnego OpenGL 4.3.

  • SuperBible 5th ed, zapewnia bibliotekę na początek, ale kiedy przejrzysz książkę, ponownie zaimplementuj funkcjonalność tej biblioteki, więc na koniec powinieneś być w pełni zorientowany. Polecam również zawijanie rzeczy OpenGL w coś, jeśli używasz języka zorientowanego obiektowo. Pracuję nad własną biblioteką dla zabawy, która wydaje się być właściwą drogą, sam ją wdrażam. Rozumiem wszystkie tajniki i muszę tylko wprowadzić te fragmenty, których faktycznie używam. Możesz także wyodrębnić niektóre rzeczy, takie jak wysyłanie danych do shaderów (nie jest o wiele ładniejszeMaterial.setColor (czerwony)), może to również pozwolić na backportowanie niektórych rzeczy, zapewniając starsze alternatywy. Istnieje również oglplus .

Głównym problemem związanym z nauką nowoczesnego „podstawowego” OpenGL jest to, że aby uruchomić podstawowy potok, nawet jeśli jest to tylko narysowanie sześcianu, musisz zrozumieć, co następuje:

  • Operacje na macierzach (użyj GLM, jeśli używasz C ++, będziesz także potrzebował wersji MatrixStack OpenGL Unofficial SDK tutaj lub mojej prostej tutaj ).
  • Programowanie modułu cieniującego GLSL.
  • powiązanie danych z modułami cieniującymi i obiektami bufora wierzchołków. Jeśli chcesz nauczyć się tylko prawdziwego, czystego profilu podstawowego, wszystkie one muszą zostać zaimplementowane jednocześnie, a jeśli coś się zepsuje, po prostu nic nie zobaczysz i prawie nie masz pojęcia, gdzie poszło nie tak. Nie dotyczy to również podstawowego oświetlenia (gdzie oprócz języka programowania musisz nauczyć się algorytmów zacieniania).

Ale nie musisz zaczynać w zależności od profilu podstawowego. Użyj niektóre z nieaktualnych funkcji na początku, prawie wszystko będzie nadal ją wspierać, a następnie go zmodernizować.

Inną kwestią jest to, że „nowoczesny” OpenGL może naprawdę odnosić się do 3 rzeczy:

  • Pierwszy to programowalny potok shadera, w przeciwieństwie do potoku funkcji stałej. Podstawowe „nowoczesne” techniki były możliwe od czasu wydania OpenGL 2.0 w 2004 r., Kiedy wprowadzono shadery (samouczki po prostu się nie zaktualizowały), również 1.5 posiadało obiekty bufora wierzchołków, które są kolejnym kamieniem węgielnym współczesnego OpenGL. Problem polega na tym, że nawet dzisiaj programiści OpenGL mogą nawet nie być w stanie skorzystać z tego wszystkiego, istnieje wiele kiepskich netbooków z tymi chipsetami Intela, które obsługują tylko OpenGL 1.5 i telefony, takie jak starsze iPhone'y / Android, które obsługują tylko OpenGL ES 1.1. Jedyną prawdziwą różnicą między tymi rzeczami w OpenGL 2.0 i OpenGL 3.x / 4.x jest to, że jest teraz obowiązkowe dla profilu podstawowego.

  • Nowoczesne OpenGL może również odnosić się do nowych rzeczy w wersjach 3.x, 4.x. Rzeczy takie jak obiekty tablicy wierzchołków , obiekty bufora ramki , jednolite obiekty bufora / std140 , kwalifikatory układu , podprogramy GLSLi tak dalej. Wiele z tych, które znalazłem, może znacznie uprzyjemnić programowanie. Mogą również subtelnie zmieniać ogólne rurociągi silnika. Są to również rzeczy, które przy niewielkim wysiłku można backportować, wykonując funkcje pomocnicze itd. (Na przykład napisz ogólny obiekt menedżera modułu cieniującego, którego możesz użyć do ustawienia mundurów, jeśli obsługiwane są UBO, które w przeciwnym razie zarządzają ręcznym przesyłaniem wartości do modułów cieniujących , może wstawię tam mały program do cieniowania przepisujący rzeczy, aby go zautomatyzować). Te rzeczy działają tylko na nowych kartach graficznych, nie zobaczysz żadnych obsługujących je netbooków ani konsol do gier wideo bieżącej generacji (używają własnego podzbioru OpenGL podobnego do OpenGL ES). Najnowszy OSX ma tylko 3.

  • Ultra Modern Nextgen OpenGL. Właśnie wydano OpenGL 4.3. Pochodzi z shaderów obliczeniowych, glMultiDrawElementsIndirect i buforów pamięci modułu cieniującego. Pozwala to na zasadniczo inny potok, w którym przesyłasz wszystkie dane wierzchołków do GPU, a następnie używasz shaderów obliczeniowych do obliczania, co należy narysować, zamiast robić to w twoim programie. Niestety jest to bardzo nowe, więc nie znam żadnych przyzwoitych samouczków. Spójrz na recenzję OpenGL 4.3, która zawiera zarys tego, jak to działa (autor mówi również, że jest artykuł GPU Pro, który ma to wyjaśnić). Będąc zupełnie nowym, na tym etapie nie będzie obsługiwany (chyba że korzystasz z nowszej karty nvidia ze sterownikami w wersji beta). Chociaż możesz użyć OpenCL / CUDA do implementacji niektórych z nich.

Pominąłbym glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix i tak dalej. Zamiast tego zacznij od nauki obiektów bufora wierzchołków bez shaderów, nie próbuj 3D w tym momencie tylko płaskiego białego trójkąta, abyś nie musiał pracować z operacjami 3d przy użyciu macierzy (ponieważ wkrótce będziesz musiał nauczyć się wiązać je z shaderem, więc brak sensu w uczeniu się na stary sposób). Następnie dodaj w modułach cieniujących, musisz zmienić sposób wiązania obiektów bufora wierzchołków, ponieważ będziesz teraz chciał używać atrybutów wierzchołków. Dowiedz się, jak przekazać im właściwości za pomocą mundurów. Następnie naucz się operacji na macierzach za pomocą GLM, powiąż matryce z modułami cieniującymi i uruchom 3D. Gdy to zrobisz, to po prostu nauka bardziej zaawansowanych rzeczy, takich jak teksturowanie,

Kilka ogólnych samouczków współczesnego OpenGL online, obejmujących potok programowania shaderów, z których większość współpracuje z OpenGL 2.0+:

Dla innych ogólnych zasobów edukacyjnych. OpenGL ES może być dobrym punktem wyjścia. OpenGL ES usunął wszystkie przestarzałe rzeczy. OpenGL 4.1 ma pełną zgodność z OpenGL ES, więc powinno być możliwe uruchomienie programu OpenGL ES i uruchomienie go w OpenGL 4.1. A podstawowe zasady są takie same dla obu.

Należy zwrócić uwagę na to, że OpenGL ES 3.0 właśnie został wydany, ale ponieważ jest nowy, nie będzie jeszcze żadnych samouczków ani wsparcia sprzętowego. Wydaje się, że nie ma żadnych zasadniczych zmian (takich jak różnica między stałym modelem potoku a modelem cieniowania, które widzieliśmy w OpenGL ES 1.0-> 2.0). Więc prawdopodobnie nie będziesz uczył się żadnych nieaktualnych rzeczy.

Ponadto OpenGL ES często używa EGL, więc musisz nauczyć się innego sposobu otwierania okna, ale nie powinno to być zbyt trudne. W przeciwnym razie istnieje kilka opakowań / emulatorów OpenGL ES lub możesz nauczyć się na Androidzie / iPhonie, jeśli masz (lub skorzystaj z ich emulatorów).

Istnieje przewodnik programowania Addison Wesley OpenGL ES 2.0, który jest odpowiednikiem czerwonej księgi.

Możesz także spojrzeć na rzeczy skupione na shaderze GLSL, ponieważ tam mieszka większość współczesnych OpenGL. Musisz tylko upewnić się, że to, czego się uczysz, obejmuje „klejącą” stronę wiązania OpenGL.

Sprawdź 2. edycję OpenGL Shading Language (Orange Book).

Książka kucharska języka cieniowania OpenGL 4.0 zawiera bardziej nowatorskie rzeczy związane z OpenGL, ale sama nie jest obszernym samouczkiem. Zdecydowanie warto zapoznać się z najnowszymi praktykami OpenGL w świecie rzeczywistym, takimi jak jednolite obiekty buforowe i podprogramy GLSL.

Na koniec możesz rzucić okiem na WebGL, chociaż w JavaScript, który będzie nieco inny i znacznie trudniejszy do debugowania.

ks. David C. Bishop
źródło
3
+1, wow. Jedyną niewielką zmianą, którą zasugerowałem, byłoby użycie na początku tablic wierzchołków po stronie klienta, ponieważ są one łatwiejszą drogą do VBO, ale bez niektórych pułapek na niedźwiedzie, w które mogą wpaść początkujący.
Maximus Minimus
1
Uznałem, że najlepiej jest unikać uczenia się / używania przestarzałej funkcjonalności, ponieważ byłoby to coś, czego należałoby się nauczyć. Inne przestarzałe rzeczy, które sugeruję używać, to rzeczy, które domyślnie zrobi OpenGL, takie jak możliwość renderowania bez użycia modułu cieniującego i zakładanie, że atrybut wierzchołka 0 to pozycja, z której obie powinny wybuchnąć po włączeniu profilu podstawowego.
David C. Bishop
2
Właśnie ukazała się szósta edycja SuperBible i jest DUŻO lepsza niż 5. edycja. Bardzo, bardzo polecam, łatwo go śledzić i uczyć się nowoczesnego OpenGL.
Filip
2
Witryna gltut Arcsynthesis nie jest już dostępna, ale samouczek można nadal pobrać z bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
15

Zapomnij o książkach przynajmniej do czasu wydania 8. edycji przewodnika po programach.

Oprócz wspomnianego samouczka uważam, że ta strona jest pomocna, ponieważ dość szybko omija podstawy. Oba są doskonałym wprowadzeniem do współczesnego OpenGL. Po przejściu do tego potrzebna będzie tylko dokumentacja, OpenGL jest łatwy w użyciu, gdy się przyzwyczaisz. Reszta to teoria grafiki komputerowej i matematyka.

dreta
źródło
11

Byłem w dokładnie takiej samej sytuacji jak ty i w końcu znalazłem to, czego potrzebowałem, aby zacząć.

Najpierw przejdź tutaj: http://www.arcsynthesis.org/gltut/ . Ta strona to fantastyczne, dobre przykłady działania i dokładne wyjaśnienie tego, co się dzieje. Mimo że kod jest napisany w C ++, używam tego do nauki pisania wersji demo OpenGL w Lisp. Jest również całkowicie wolny od starego sposobu robienia rzeczy, więc nie musisz się martwić o wybranie złych nawyków.

Chciałbym podkreślić, że chociaż jest to „kolejna strona internetowa”, nie znalazłem żadnych książek, które podają tak czyste i zwięzłe wyjaśnienie podstaw, jak to.

Po przejściu przez powyższą stronę będziesz już mieć podstawową wiedzę na temat shaderów, a wiele rzeczy, które musisz wiedzieć, można teraz przeglądać w Google (rzuć okiem na zasoby opengl es lub webgl, ponieważ usunęły one wszystkie przestarzałe rzeczy) lub znalezione na stronie wiki Opengl. To drugie jest strasznie tajemnicze, jeśli nie masz pod ręką podstaw z miejsca wykonywania łuków, ale bardzo pomocne, gdy z grubsza wiesz, czego szukasz.

Jeśli chcesz naprawdę głęboko przyjrzeć się GLSL, zajrzyj na: OpenGL Shader Language (The Orange Book) Pracuję nad tym bardzo powoli, ale pozwolę ci zrozumieć pisanie shaderów, abyś mógł kontynuować tę pogoń. Ostrzegam cię, że ta książka zawiera, według słów recenzenta, „200 stron najwyższej jakości treści zapakowanych w 600-stronicową książkę”, ale dodatkowa historia i informacje mogą zapewnić kontekst, którego potrzebujesz, aby zrozumieć trasy, które OpenGL jak spadł standard (no cóż, i tak mi to pomaga!)

Mam nadzieję, że to pomoże i powodzenia, nie mogę się doczekać, aby zobaczyć / zagrać w swoją pracę w przyszłości!

AKTUALIZACJA

Wygląda na to, że arcsynthesis jest niestety offline, jednak strona została tutaj przekonwertowana na pdf , a kod został tutaj dublowany .

Również w ciągu kilku lat od mojej oryginalnej odpowiedzi learnopengl.com/ stał się absolutnie genialny. Podczas gdy nadal zalecam arcsynthesis ze względu na surową doskonałość jego wprowadzenia do współczesnego opengl, strona learnopengl obejmuje znacznie więcej niż arcsysthesis i zarządza nim za pomocą przystępnego języka, stworzyliśmy przykłady i kod open source. Zasadniczo jest cholernie dobrze, sprawdź to!

Jeśli chodzi o książki, nie zaszedłem za daleko z pomarańczową książką, ale mogę polecić trzecie wydanie „Real-Time Rendering” . Gdy będziesz gotowy na techniczne rzeczy, ta książka jest kopalnią złota.

Baggers
źródło
2
O MÓJ BOŻE! pierwszy link jest fantastyczny!
MatterGoal
Witryna gltut nie jest już dostępna, ale samouczek można nadal pobrać z bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
Dobra uwaga, zaktualizuję też mój post o dodatkowe rekomendacje.
Baggers
8

Również sprawdzić Open.gl . Ma tutoriale wykorzystujące nowoczesny Open GL

anirudhrata
źródło
5

Dwie strony, które były dla mnie bardzo pomocne, to: http://www.arcsynthesis.org/gltut/ i http://ogldev.atspace.co.uk/

Ponadto wiki OpenGL jest niezwykle dobrym i aktualnym zasobem.

Po ich przejściu gorąco polecam gryzienie kul i przeczytanie specyfikacji OpenGL. Wtedy będziesz profesjonalistą.

Sean
źródło
Tak, uważam, że samouczki online są znacznie bardziej przydatne niż większość książek. Superbible 5. edycja jest bardzo rozczarowująca.
Philip
Witryna gltut nie jest już dostępna, ale samouczek można nadal pobrać z bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
4

Najlepsza książka, jaką spotkałem, która dotyczy „nowoczesnego” OpenGL to http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Mimo że jest to „książka kucharska”, przeprowadzi Cię przez niezbędne kroki w celu skonfigurowania renderowania i jakich bibliotek pomocniczych będziesz potrzebować (biblioteka obrazów, biblioteka matematyki wektorowej).

Oprócz tego omawia wiele typowych rzeczy, do których możesz chcieć używać OpenGL, bez zbyt głębokiego wnikania w cokolwiek (jak w przypadku cieni, obejmuje mapowanie cieni i filtrowanie map cieni, ale nie wchodzi w żadne z więcej złożone metody mapowania cieni).

Polecam także zakup pomarańczowej książki.

Jari Komppa
źródło
Dziękuję @Jari. Czy to nie „tylko” shader? Mam na myśli, czy ta książka wprowadza zarówno techniki OpenGL, jak i shadery?
MatterGoal
2
@MatterGoal: Modern OpenGL jest prawie całkowicie oparty na shaderze. Ta książka opisuje wiążącą stronę OpenGL. Polecam także tę książkę, ale jako uzupełnienie czegoś innego, nie jest ona tak naprawdę przeznaczona do podstawowej nauki, ale pokazuje kilka świetnych zastosowań moddrn w świecie rzeczywistym.
David C. Bishop
4

Więcej samouczków i rzeczy, które nie zostały wymienione, ale były pomocne

Quonux
źródło
+1 Aby dodać do listy, dostępne są samouczki OpenGL autorstwa Aksa, które nie są zbyt uporządkowane, ale zawierają wystarczającą ilość informacji do skonfigurowania.
legends2k