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 discard
zmiana 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.