Nauka nowoczesnego OpenGL

Zdaję sobie sprawę, że w ciągu ostatnich kilku lat pojawiły się podobne pytania, ale po przeprowadzeniu pewnych badań nadal nie mogę zdecydować, skąd i czego mam się nauczyć. Chciałbym również zobaczyć twój aktualny, rzeczywisty widok na nowoczesne programowanie OpenGL z większym podejściem C++ OOP i shader. I upewnij się, że moje rzeczywiste zrozumienie niektórych rzeczy jest ważne.

Więc... obecnie mamy OpenGL 4.2 out, który jak czytałem gdzieś wymaga sprzętu dx11 (co to znaczy?) oraz zestaw "bocznych" bibliotek, aby na przykład utworzyć okno.

Jest najczęstszy GLUT, którego bardzo nienawidzę. Jednym z głównych powodów są wywołania funkcji, które nie pozwalają na swobodę w sposobie tworzenia głównej pętli. Jak niektórzy mówili, nie był przeznaczony do gier.

Jest też GLFW, który jest dla mnie całkiem miły i prosty. Z jakiegoś powodu ludzie używają go z GLUT. (który zapewnia nie tylko inicjalizację okna, ale także inne narzędzia? )

I jest też SFML i SDL (SDL

I mamy również GLEW, czyli narzędzie do ładowania rozszerzeń... czekaj... czy GLUT/GLFW nie jest już rozszerzeniem? Czy jest jakiś powód, aby go używać, na przykład czy są jakieś naprawdę ważne rozszerzenia, którymi można się zainteresować?

Do tej pory mamy tworzenie okien (i kilka narzędzi), ale... OGL nie zajmuje się wczytywaniem tekstur, ani modeli 3D. Jak wiele innych libs do I need?

Wspomnijmy teraz o części edukacyjnej. Jest (w) słynny samouczek NeHe. Napisany w języku C z wykorzystaniem WinApi, z niezwykle niejasnym kodem i przestarzałymi rozwiązaniami, ale wciąż najpopularniejszym. Niektóre rzeczy, takie jak Red Book można znaleźć, które są związane z wersjami takimi jak 2.x lub 3.x, jednak jest tylko kilka (i niedokończonych) tutoriali wspominających o 4.x.

Z czym iść?

Author: Nicol Bolas, 2012-01-05

6 answers

Jeśli piszesz grę, unikałbym takich rzeczy jak GLUT i pisałbym własne opakowania, które będą miały największy sens dla Twojej architektury renderowania gry.

W tym momencie uniknąłbym również OpenGL 4.2, chyba że chcesz kierować tylko konkretny sprzęt na konkretne platformy, ponieważ wsparcie jest minimalne. czyli najnowsza wersja Mac OSX Lion właśnie dodała wsparcie dla OpenGL 3.2.

Dla najbardziej kompleksowego pokrycia maszyn wyprodukowanych w ciągu ostatnich kilku lat, Zbuduj swój framework wokół OpenGL 2.1 i dodać dodatkowe wsparcie dla nowszych funkcji OpenGL, gdzie mają sens. Ogólny projekt powinien być taki sam. Jeśli interesuje Cię tylko kierowanie na" aktualne " maszyny, tj. maszyny z końca 2011 roku i do przodu, Zbuduj swój framework wokół OpenGL 3. Tylko najnowszy sprzęt obsługuje 4.2 i tylko na Windows i niektórych Linuksach. Jeśli jesteś zainteresowany kierowaniem urządzeń mobilnych i konsol, użyj OpenGL ES 2.0.

GLEW ładuje i zarządza OpenGL Rozszerzenia, które są rozszerzeniami sprzętowymi różnych dostawców, w przeciwieństwie do GLUT, który jest zestawem narzędzi do budowania aplikacji OpenGL, zupełnie inne rzeczy. Gorąco polecam korzystanie z GLEW, ponieważ zapewni to czysty mechanizm do określania, które funkcje są dostępne na sprzęcie, na którym jest uruchamiany, i uwolni cię od zadania ręcznego przypisywania wskaźników funkcji do odpowiednich funkcji.

OpenGL SuperBible to całkiem dobra książka, sprawdź również język cieniowania OpenGL . Wszystko, co robisz z nowoczesnym OpenGL, będzie wymagało użycia shaderów-nie będzie już stałej funkcjonalności - więc twoim największym wyzwaniem będzie zrozumienie GLSL i sposobu działania potoków shaderów.

 19
Author: Gerald,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-04 21:13:39
Więc... obecnie mamy OpenGL 4.2, który jak gdzieś przeczytałem wymaga sprzętu dx11 (co to znaczy?) oraz zestaw 'bocznych' bibliotek, aby na przykład utworzyć okno.

DX11 hardware jest... sprzęt, który ma napis" obsługuje DirectX 11 " z boku pudełka. Nie jestem pewien, o co tu pytacie; nie wiesz, czym jest Direct3D, czym jest D3D 11 lub co odróżnia D3D 11 od poprzednich wersji?

FYI: D3D jest alternatywą Tylko Dla Windows OpenGL, aby uzyskać dostęp do sprzętu renderującego. Wersja 11 to tylko najnowsza wersja API. A D3D11 dodaje kilka nowych rzeczy w porównaniu do D3D10, ale nic, czego początkujący by potrzebował.

OpenGL jest specyfikacją opisującą pewien interfejs dla operacji graficznych. Jak ten interfejs jest tworzony nie jest częścią OpenGL. Dlatego każda platforma ma swój własny sposób tworzenia kontekstu OpenGL. Windows używa API Win32 z WGL. X-Windows wykorzystuje X-Windows API z Funkcje GLX. I tak dalej.

Biblioteki takie jak GLUT, GLFW, ETC są bibliotekami, które abstrakcyjne wszystkie te różnice. Tworzą i zarządzają oknem OpenGL dla Ciebie, dzięki czemu nie musisz brudzić kodu szczegółami związanymi z platformą. Nie musisz z nich korzystać.

Oczywiście, jeśli jesteś zainteresowany naukąOpenGL , najlepiej unikać zajmowania się minutami specyficznymi dla platformy, takimi jak dbanie o HWND i tym podobne.

I mamy również GLEW, czyli narzędzie do ładowania rozszerzeń... czekaj... czy GLUT/GLFW nie jest już rozszerzeniem? Czy jest jakiś powód, aby go używać, na przykład czy są jakieś naprawdę ważne rozszerzenia, którymi można się zainteresować?

To kolejne nieporozumienie. GLUT jest biblioteką , a nie rozszerzeniem. Rozszerzenie OpenGL jest częścią OpenGL . Widzisz, OpenGL to tylko Specyfikacja, dokument. Implementacja OpenGL, której obecnie używasz, implementuje system graficzny OpenGL, ale może również zaimplementować szereg rozszerzeń do tego systemu graficznego.

GLUT nie jest częścią OpenGL; to tylko Biblioteka. Zadaniem GLUT jest tworzenie i zarządzanie oknem OpenGL. GLEW jest również biblioteką, która służy do ładowania funkcji OpenGL . To nie jedyna alternatywa, ale popularna.

Do tej pory mamy tworzenie okien (i kilka narzędzi), ale... OGL nie zajmuje się wczytywaniem tekstur, ani modeli 3D. Ile jeszcze libów mam potrzebujesz?

OpenGL nie jest silnikiem gry. Jest to system graficzny, przeznaczony do współpracy z dedykowanym sprzętem graficznym. Ta praca nie ma nic wspólnego z ładowaniem czegokolwiek z jakiegokolwiek pliku. Tak, tworzenie gry wymaga tego, ale jak wcześniej wspomniano, OpenGL nie jest silnikiem gry.

Jeśli musisz załadować format pliku, aby zrobić coś, co chcesz zrobić, musisz albo napisać kod, aby wykonać ładowanie (i dostosowanie formatu potrzebne do interfejsu z GL) lub Pobierz bibliotekę, która zrobi to za Ciebie. OpenGL Wiki utrzymuje całkiem dobrą listę narzędzi do różnych zadań .

Jest (w) słynny samouczek NeHe. Napisany w języku C z wykorzystaniem WinApi, z niezwykle niejasnym kodem i przestarzałymi rozwiązaniami, ale wciąż najpopularniejszym. Niektóre rzeczy, takie jak Red Book można znaleźć, które są związane z wersjami takimi jak 2.x lub 3.x, jednak jest tylko kilka (i niedokończonych) tutoriali wspominających o 4.x.

Co iść z?

OpenGL Wiki utrzymuje listę materiałów online do nauki OpenGL rzeczy , zarówno starej szkoły i bardziej nowoczesne.

Uwaga: bezwstydna autopromocja trwa!

Moje samouczki na temat uczenia się Grafiki {32]} są całkiem dobre, z wieloma sekcjami i nadal są aktywnie opracowywane. Nie uczy żadnego OpenGL 4.x-specific funkcjonalności, ale OpenGL 3.3 jest całkowicie kompatybilny z 4.2. Wszystkie te programy będą działać dobrze na 4.x hardware.

Utrzymuję również nieoficjalne SDK dla OpenGL. jest to pakiet użytecznych narzędzi, wszystkie zaprojektowane do budowy przez prosty, zunifikowany system budowania. Jest to również dość dobrze udokumentowane.

 37
Author: Nicol Bolas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-26 04:44:08

Obecnie uczę się również nowoczesnego OpenGL. Miałem również trudności ze znalezieniem dobrych zasobów, ale oto, co odkryłem do tej pory.

Szukałem dobrej książki i skończyło się OpenGL ES 2.0 Programming Guide , który moim zdaniem jest najlepszym wyborem do nauki współczesnego OpenGL teraz. Tak, książka jest o OpenGL ES, ale nie daj się przestraszyć. Dobrą rzeczą w OpenGL ES 2.0 jest to, że wszystkie wolne części API zostały usunięte, więc nie masz żadnych złych nawyków z uczenia się, gdy jest jeszcze bardzo blisko pulpitu OpenGL inaczej, tylko kilka funkcji brakuje, które myślę, że można nauczyć się dość łatwo po opanowaniu OpenGL ES 2.0.

Z drugiej strony nie masz bałaganu z bibliotekami okien itp. że masz z pulpitu OpenGL i tak książka na OpenGL ES nie pomoże Ci tam. Myślę, że to bardzo subiektywne, z których bibliotek korzystać, ale do tej pory udało mi się dobrze z SDL, ImageMagick i Open Asset Import Biblioteka .

Książka była dobrą pomocą, ale oprócz tego, jest też ładny zbiór samouczków uczących nowoczesnego OpenGL od podstaw w rozwoju OpenGL na Linuksie . (Wydaje mi się, że na innych osach ta nazwa jest ważna.) Książka, samouczki i rzut oka lub dwa co jakiś czas do Orange Book {[4] } wystarczyły, aby zrozumieć podstawy współczesnego OpenGL. Zauważ, że nadal nie jestem mistrzem w tej dziedzinie, ale na pewno ma ja Zacząłem.

 6
Author: Antti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-04 21:07:52

Zgadzam się, że trudno jest wejść do OpenGL w dzisiejszych czasach, gdy wszystkie tutoriale i przykłady używają przestarzałych plików projektu, linków bokenowych itp., a jeśli poprosisz o pomoc, po prostu kierujesz się do tych samych starych tutoriali.

Na początku byłem naprawdę zmieszany z samouczkami NeHe, ale kiedy trochę lepiej zrozumiałem C, kompilowanie bibliotek na Unixie i inne podstawowe rzeczy, wszystko zaczęło się układać.

Jeśli chodzi o Ładowanie tekstur, mogę polecić Gleba: http://www.lonesock.net/soil.html

Nie jestem pewien, ale przypominam sobie, że miałem problemy z poprawnym kompilowaniem, ale to może być moje słabe doświadczenie w tym czasie. Daj mi znać, jeśli wpadniesz w kłopoty!

Kolejną użyteczną wskazówką jest uruchomienie maszyny Wirtualnej z Linuksem, a następnie pobranie przykładowego kodu Nehe Linux i skompilowanie go po wyjęciu z pudełka. Myślę, że potrzebujesz tylko GLUT, żeby to zadziałało.

Ja też wolę GLFW przed GLUT, głównie dlatego, że GLUT nie jest utrzymywany aktywnie.

Powodzenia!

 3
Author: oskob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-04 21:20:28

Głównym punktem współczesnego OpenGL jest Tesselacja i nowy typ programów shaderów, więc chciałbym polecić zacząć od samodzielnego samouczka na temat tesselacji OpenGL 4, czyli: http://prideout.net/blog/?p=48

Po podręcznikach i samouczkach dobrym następstwem jest przyjrzenie się silnikom open-source, które są oparte na "nowym" OpenGL 3/4. Jako jeden z twórców chciałbym wskazać Silnik Linderdaum.

 2
Author: Sergey K.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-14 20:16:06

"nowoczesne programowanie OpenGL z większym podejściem C++ OOP i shader" sprawia, że wspominam Qt. Jeszcze o tym nie wspomniano, ale Qt jest biblioteką, której warto się nauczyć i jest najprostszym sposobem pisania wieloplatformowych aplikacji C++. Uważam również, że jest to najprostszy sposób na naukę OpenGL w ogóle, ponieważ łatwo obsługuje inicjalizację i kod specyficzny dla sprzętu. Qt ma również własne biblioteki matematyczne, więc wszystko, czego potrzebujesz, aby zacząć korzystać z OpenGL, to Qt. VPlay to biblioteka, która używa Qt, aby pomóc ludziom twórz gry łatwo, więc oczywiście niektórzy ludzie używają Qt do tworzenia gier.

Krótkie wprowadzenie do Qt i OpenGL Zobacz mój post tutaj .

Wspomnę, że skoro Qt abstrahuje jakiś kod OpenGL, to jeśli próbujesz użyć wrapperów Qt, API jest nieco inne niż tylko OpenGL (choć prawdopodobnie prostsze).

Jeśli chodzi o mój głos na dobre tutoriale lub książki sprawdź OpenGL tutoriale i szybkie tutoriale. Ebook Antona na Amazonie jest również oceniany wyżej niż jakikolwiek inny opublikowany zasób OpenGL, który widziałem do tej pory (i znacznie tańszy).

 -1
Author: steventaitinger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-07 22:00:16