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.