Począwszy od OpenGL, gdy większość samouczków jest nieaktualna [zamknięte]

16

Jestem pewien, że jest już wiele takich pytań, ale ciągłe aktualizowanie biblioteki OpenGL wyrzuca je wszystkie, a za miesiąc lub dwa odpowiedzi tutaj znów będą bezwartościowe.

Jestem gotowy do programowania w OpenGL przy użyciu C ++. Mam działający kompilator (DevCpp; NIE proście mnie o przejście na VC ++ i nie pytajcie dlaczego). Teraz szukam tylko solidnego samouczka na temat programowania w OpenGL. Mój asystent znalazł samouczek dostarczony przez NeHe Productions, ale jak się dowiedziałem, jest to DROGA POZA DATĄ! (chociaż zrobiłem razem podstawowe okno do obsługi płótna OpenGL)

Potem wszedłem do sieci i znalazłem OpenGL SuperBible, który najwyraźniej używa freeglut? Chciałbym jednak wiedzieć, czy 5. edycja SuperBible jest już aktualna. Sugestia dla Freeglut, którą znalazłem, powiedziała, że ​​najnowsza wersja to 2.6.0, ale teraz to 2.8.0!

  • Czy OpenGL SuperBible to wciąż dobre i dość aktualne miejsce na start?
  • Czy jest lepsze miejsce do nauki OpenGL?
  • Czy wolno mi po prostu przechowywać freeglut w katalogu zawierającym DevCpp (może w GL), czy jest jakaś ważna procedura?
  • Czy są jakieś uwagi lub sugestie, o które nie pomyślałem, bo dopiero zaczynam?

@dreta wyjaśnił mi kilka rzeczy, więc teraz mam lepszy pomysł na pytanie:

Myślę, że chciałbym zacząć od OpenGL przy użyciu biblioteki opakowań zamiast bezpośredniego dostępu do OpenGL.
Po prostu myślę, że dla początkującego łatwiej byłoby mi programować i uzyskiwać dobre wyniki, podczas gdy nie muszę jeszcze rozumieć wszystkich brudnych szczegółów (jak wspomniano @stephelton).

Problem polega na tym, że nie mogę znaleźć żadnej biblioteki, która nie ma niezdefiniowanych odwołań do nieobsługiwanych już funkcji. Freeglut wydaje się działać, ale nadal korzysta z GLU.
Czy ktoś wie, co mogę zrobić?
Próbowałem też skompilować pierwsze źródło SuperBible, ale dostałem błędy, ponieważ GLAPI nie jest zdefiniowane jako typ, błąd pochodzący z biblioteki GLU.

Chciałbym użyć SuperBible, ale nie wiem, jak to naprawić.

Codesmith
źródło
2
Powinieneś przejść na GCC.
notlesh
DevCpp to tylko IDE; który uruchamia GCC (konkretnie mingw). Ale odkąd wspomniano, Eclipse CDT byłby preferowany, ponieważ nie był porzucany przez ostatnie 10 lat.
Casper Beyer
4
@Casper Dziedzicznikiem spuścizny DevCpp był Code :: Blocks i wciąż jest regularnie aktualizowany.
Alex Shepard
1
Jeśli chcesz otoczyć bibliotekę wokół OpenGL, sugeruję wypróbowanie SFML . SFML zapewnia zwykłe rzeczy, takie jak tworzenie okien, liczniki czasu itp., Jednocześnie umożliwiając rysowanie tekstu i prostych kształtów. Możesz rzucić utopienie na używanie „surowego” OpenGL, kiedy tylko chcesz, mieszanie funkcji SFML i surowych wywołań API.
Oskar N.,
1
Nie możesz „zamknąć” pytania, dodając „{ZAMKNIĘTY]” do tytułu. Pytania zostaną zamknięte przez moderatorów lub jeśli wystarczająca liczba użytkowników zagłosuje, aby je zamknąć. Cofam twoje zmiany z powrotem .. „ZAMKNIĘTE” zostanie automatycznie dołączone do twojego tytułu, jeśli moderatorzy zdecydują się go zamknąć.
bummzack

Odpowiedzi:

19

Nasza rezydent Nicol Bolas prowadzi książkę online o nowoczesnym programowaniu graficznym . Korzysta z nowoczesnego OpenGL, wszystko jest wprowadzane w łatwym do konsumpcji tempie, jest to dobre miejsce do rozpoczęcia. Używałem go do nauki nowoczesnego OpenGL i robiłem z niego cuda w ciągu ostatnich 2 miesięcy.

Poza tym tu i tam są fragmenty wiedzy. Wiki OpenGL jest dość dobrze utrzymane. Kod nie jest „najlepszymi praktykami” i czasami występuje dwuznaczność, jeśli chodzi o wersję OpenGL, ale poza tymi rzadkimi okazjami, jest to świetny zasób.

Jeśli chcesz dowiedzieć się więcej o GLSL, zapoznaj się z samouczkiem Core GLSL od lighthouse3D. Chociaż jest to jedyna podstawowa wiedza, której mógłbym „zaufać” na stronie, reszta bywa przestarzała.

Gdy zaczniesz rozumieć, jak powstaje nowoczesny OpenGL, z łatwością znajdziesz konkretne informacje, odfiltrujesz nieaktualny kod i, co najważniejsze, przeczytasz specyfikację. Musisz gdzieś zacząć.

Większość, jeśli nie wszystkie dostępne książki OpenGL są przestarzałe. Nowy SuperBible jest jakimś dziwakiem i nie poleciłbym go nikomu. Przewodnik po programowaniu OpenGL dla OpenGL 4.1 wychodzi 16 września, niestety siódma edycja używa przestarzałego kodu, więc na pewno musisz poczekać.

Oczywiście zawsze możesz tutaj zadawać pytania.

dreta
źródło
1
Dlaczego nie zaproponowałbyś SuperBible?
Codesmith
3
@ AUTO Piąta edycja SuperBible wykorzystuje niestandardowe opakowanie wokół OpenGL, aby uczynić go „dostępnym”. Wiele przykładów nadmiernie używa niestandardowego opakowania. Nie uczy cię, do czego jest on przypuszczony, czyli specyfikacji rdzenia OpenGL. Z mojego punktu widzenia, jeśli nie musisz jawnie uczyć się przestarzałego OpenGL, to po prostu zapomnij, że w ogóle istnieje. Nie ma sensu się tego uczyć. Podstawowa specyfikacja jest znacznie bardziej przejrzysta i wydajna.
dreta
@ AUTO Podstawowa specyfikacja na początku jest znacznie bardziej wymagająca, to dobrze. Zmusi Cię to do przejęcia większości procesu renderowania, zapewniając pełne zrozumienie i kontrolę nad nim. Otwiera wiele, wiele więcej możliwości niż przestarzały kod. Po tym, jeśli możesz nauczyć się API swojego systemu operacyjnego i lanuch OpenGL pod nim bez rzeczy takich jak nadmiar, to jesteś w krainie czarów.
dreta
OK, pozwólcie, że zadam wam ważne pytanie: biblioteka GLU wydaje się przestarzała i całkowicie nieobsługiwana; korzystając ze specyfikacji, czy uzyskuję bezpośredni dostęp, pomijając potrzebę GLU? Tak, że nie dostałbym więcej błędów linkera do nieistniejących funkcji, do których odwołuje się biblioteka GLU?
Codesmith
@AUTO GLU jest całkowicie niepotrzebne, tylko dotknąłem go 10-metrowym biegunem podczas zajęć z programowania grafiki (musieliśmy używać przestarzałego kodu, było to bolesne, standardy zmieniają się szybciej niż program lekcji, jak sądzę). To tylko biblioteka, która pomaga w przestarzałym kodzie. Jeśli masz skonfigurowany kod z GLU, to prawdopodobnie śmierdzi.
dreta
1

Minęło trochę czasu, odkąd zadano to pytanie, ale mam nadzieję, że pomoże to osobom, które mają takie samo pytanie jak ty.

Zacząłem od OpenGL, czytając minibooka arcsynthesis.org. Nie jestem pewien, kto to napisał. Wygląda na to, że rejestracja witryny wygasła lub coś takiego, ale powinieneś ją znaleźć tutaj: http://web.archive.org/web/20140209181347/http://www.arcsynthesis.org/gltut/ . Korzysta z OpenGL 3.3, więc będziesz korzystać z nowoczesnego potoku i wszystkich związanych z tym praktyk, ale nie będziesz narażony na teselację ani shadery obliczeniowe.

Kolejna strona, na którą warto spojrzeć, to https://open.gl/ . Wydaje się, że jest BARDZO skoncentrowany na początkującym i nie obejmuje rzeczy tak dokładnie jak powyższy materiał, ale może być dobrym punktem wyjścia dla osób, które dopiero zaczynają.

Pamiętaj, aby przeczytać wiki OpenGL i wyszukać nazwy funkcji w Google, jeśli potrzebujesz pomocy. Niektóre strony na wiki są całkowicie bezużyteczne, ale inne są bardzo pomocne, zarówno jako odniesienie, jak i materiał do nauki.

Smakować
źródło
1
Osoba wymieniona w zaakceptowanej odpowiedzi napisała to: Nicol Bolas - gamedev.stackexchange.com/users/8240/nicol-bolas
Jesse Dorsey
0

Te stare samouczki są nadal bardzo przydatne dla początkujących. W rzeczywistości sugerowałbym zacząć od tego, a nie od najnowszych wersji OpenGL. W nowszych wersjach odrzucono niektóre łatwiejsze metody rysowania geometrii (a mianowicie rysowanie w trybie natychmiastowym).

W najnowszych wersjach musisz przygotować i wysłać tablice wierzchołków i powiedzieć karcie graficznej, jak twoje wierzchołki są ułożone w podanej macierzy. Te rzeczy są uciążliwe do debugowania.

Niektóre wersje (a mianowicie OpenGL ES 2.x) wymagają podania własnych równań oświetlenia (w postaci Shaderów fragmentów) i transformacji własnych danych wierzchołków, aby znalazły się na ekranie w żądanym miejscu (Shadery wierzchołków). Jest to jeszcze trudniejsze do debugowania i nie ma dla początkującego (moim zdaniem) miejsca.

Sugerowałbym więc, abyś wrócił do tych samouczków NeHe (itp.) I zaczął od tego. Mogą być „nieaktualne”, ale nadal działają. Kiedy zaczniesz rozumieć, co naprawdę dzieje się w potoku renderowania w OpenGL i zapoznasz się z niektórymi matematycznymi pojęciami, które sprawiają, że te rzeczy działają, będziesz gotowy spojrzeć na niektóre z bardziej aktualnych metod renderowanie w OpenGL.

notlesh
źródło
Właściwie to NIE działają. Dlatego opublikowałem to pytanie. Używają funkcji gluPerspective, która jest przestarzała i nie ma absolutnego substytutu.
Codesmith
1
To nie jest funkcja OpenGL. Jest to osobna funkcja narzędzia zapewniana przez inną bibliotekę. Możesz łatwo znaleźć kod do niego - nie jest to bardzo trudne.
notlesh
Dzięki, ale znalazłem tylko niedoskonały zamiennik, którego nie umiem używać. Przyjmuje argument „float * matrix”, podczas gdy stary używa pewnej wewnętrznej macierzy. Co więc na to postawię?
Codesmith
Pierwsze trafienie w Google dla „gluPerspective Implementation” jest dokładnie tym, czego szukasz. nazywa glFrustum, który nie jest dostępny w niektórych najnowszych wersjach OpenGL (ES 2.x go nie obejmuje). Nawet to nie jest zbyt trudne do znalezienia.
notlesh
0

Jak powiedzieli inni, większość książek jest albo przestarzała, albo zbyt zaawansowana. Niemniej jednak poleciłbym 5. edycję SuperBible, ale tylko po to, aby uzyskać szybki przegląd tego, co można zrobić w OpenGL i zapoznać się z takimi rzeczami, jak widok / projekcja itp.

Natychmiastowe zanurzenie się we współczesnym OpenGL może początkowo być przytłoczone, więc zastanów się, jak nauczyć się podstawowych rzeczy w przestarzałych wersjach.

Chciałbym również dodać stronę z dobrymi samouczkami, które ostatnio znalazłem http://ogldev.atspace.co.uk/

Grieverheart
źródło
Dzięki, sprawdzę ten samouczek; ale aby użyć OpenGL SuperBible, moje pytanie wciąż pozostaje: Jak naprawić GLU, skoro Freeglut jest na nim oparty?
Codesmith
@ AUTO: FreeGLUT nie jest oparty na GLU. Niektóre funkcje FreeGLUT wywołują GLU, ale jeśli nie wywołasz tych funkcji, nie będziesz mieć problemu.
Nicol Bolas,
Ale czy nie jest prawdopodobne, że SuperBible wywołuje te funkcje? A jeśli tak, to nie można używać go .
Codesmith
Naprawdę, moim zdaniem nie zawracaj sobie głowy kodem źródłowym dostarczonym z SuperBible. Przeczytaj, ale spróbuj zrobić wszystko od zera. Jeśli chodzi o twoje problemy z GLU, zgaduję, że nie skonfigurowałeś / nie zainstalowałeś bibliotek poprawnie. Pobierz najnowszą wersję MinGW. Pobierz także najnowszą wersję freeglut i skompiluj go lub znajdź wstępnie skompilowaną bibliotekę. W każdym razie powinieneś zacząć uczyć się kilku rzeczy, zamiast spędzać tyle czasu na planowaniu, jak zacząć.
Grieverheart,
@ AUTO: Dlaczego jest prawdopodobne, że SuperBible nazywa je? Gdyby je wywołał, kod SuperBible nie działałby. Dlatego ich nie nazywa.
Nicol Bolas
0

arcsynthesis.org (strona wymieniona w zaakceptowanej odpowiedzi) wydaje się niestety nie działać. (EDYCJA: jest dostępna pod tym linkiem !).

Samouczki Antona Gerdelana dotyczące OpenGL 4 są bardzo czytelne i aktualne od połowy 2014 roku. Pierwsze kilka jest bezpłatne, reszta jest dostępna na Amazon, gdzie mają świetne recenzje, za niewielką cenę. Do tej pory byłem zadowolony.

Więcej darmowych samouczków dotyczących OpenGL 3.3+ można znaleźć na stronie http://www.opengl-tutorial.org/ . Pochodzą z 2012 roku, ale mogą być dobrym materiałem uzupełniającym dla innych źródeł.

iHateCamelCase
źródło
OGLDev jest aktualny, dogłębny i darmowy. ogldev.atspace.co.uk/index.html
Yattabyte
kaszel
Nicol Bolas
Wspaniale jest zobaczyć, że jest dostępny! Sprawdzę również te materiały.
iHateCamelCase