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)?
Odpowiedzi:
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
źródło
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.
źródło
preamake
samym 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.Poleciłbym zacząć od tej serii samouczków, są one dobre i używają bardziej nowoczesnych funkcji niż te nehe http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html
źródło
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!
źródło
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.
źródło
Oto kolejny. To jest bardzo dobre. Chociaż ma tylko 4 rozdziały.
http://openglbook.com/
Innym jest http://www.arcsynthesis.org/gltut/ . Ten jest ogromny, wolny i wysoki profil.
Nie zapomnij śledzić http://www.opengl.org/wiki/Getting_started
źródło
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ć:
To już dużo pracy.
źródło
Nauczyłem się opengl, pisząc „prostą” grę: 3D Tetris !
Spróbuj stworzyć własną prostą grę / aplikację:
Zrób coś prostego, co Cię interesuje!
źródło
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
źródło
No cóż, nikt nie mówił o Przewodniku programowania OpenGL , nie mam tej konkretnej edycji, ale starsze były całkiem dobre.
źródło
Nie powiedziałbym, że ta seria samouczków wideo jest najlepszym sposobem, ale jest bardzo dobrze wyjaśniona: www.71squared.com/2009/03/iphone-game-programming-tutorial-1
źródło
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
źródło
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.
źródło
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.
źródło
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ę ...
źródło