Jaka libka do grafiki o sporym wachlarzu możliwości i długim okresie wsparcia?

0

Witam,
może najpierw naświetlę nieco sytuację, bo pytanie może wydawać się oczywiste.
Otóż, nie interesuje mnie grafika komputerowa jako taka. Potrzebuję libki, która pozwoli mi na rysowanie zarówno w 3D i 2D, grafy, słupki, symulacje cząsteczek - to są rzeczy które mnie interesują. Mam zamiar pokierować swoją edukację w stronę algorytmiki i uczenia maszynowego i szukam po prostu czegoś, co pozwoli mi na wizualizację danych (również w 3D).

Mimo tego, jako że nie lubię upraszczać sobie przesadnie życia, lubię czasem grzebnąć coś niżej i jeśli chcę coś zmienić, to lubię, gdy biblioteka daje taką możliwość. Ogólnie nie przeszkadza mi fakt, że trzeba pisać dużo kodu nisko poziomowego, bo to jest do nauczenia i po czasie robi się to machinalnie. Chodzi mi głównie o to, żeby biblioteka nie umarła za chwilę i miała sporą społeczność użytkowników.

Do tej pory do wizualizacji danych 2D używałem SFMLa ale mam odczucie, że jest on dość ograniczony i wręcz niezbyt wydajny. Dlatego rodzą się moje pytania - OpenGL da radę? Czy lepiej iść od razu w vulkana? Duże są różnice pomiedzy opengl 3 a 4 i czy ogólnie nauczenie się go jest rozwojowe? Możecie polecić jakąś literaturę/poradniki? Tylko proszę bez odnośników do 800-stronnicowych ksiąg, bo przeczytanie całej książki nie jest warte tyle, co godzina pisania prawdziwego kodu :)

Tak tak, wiem, że jeśli nie zależy mi na grafice stricte, to nie muszę się porywać na libkę i mogę przecież użyć silnika - ale ja lubię znać zasady działania rzeczy od podszewki.
Dodam, że pracuję głównie pod linuxem, direct odpada.
Dzięki za porady, jeśli możecie się wypowiedzieć na temat bibliotek, których używacie, to z chęcią posłucham :)

1

Zastanawiałeś się nad Qt do wizualizacji? Ma i moduł do wykresów i do grafiki 3D. To tak na wypadek, gdybyś po prostu nie wiedział o tym, że są alternatywy do pisania wszystkiego z palca ;)

OpenGL da radę? Czy lepiej iść od razu w vulkana?

Na dzień dzisiejszy, OpenGL nigdzie nie znika i dalej pisze się m w niej dużo kodu, jeżeli o to Ci chodzi. Pod względem możliwości oba API są porównywalne - rozszerzenia, które powstały na potrzeby Vulkana mają swoje odpowiedniki dla GLa. Do nauki OpenGL będzie lepszym wyborem - Vulkan zmusza Ciebie do martwienia się o synchronizację, zarządzanie pamięcią GPU, czy utrudnia zmienianie stanu (blending itp.). Dzięki temu pisanie w GL (szczególnie bez wcześniejszego doświadczenia) będzie o wiele łatwiejsze. Vulkan potencjalnie pozwala na bardziej wydajną implementację tych samych rozwiązań, ale: 1) z GL też można sporo wycisnąć i 2) wymaga to sporo pracy i trochę doświadczenia.

Duże są różnice pomiedzy opengl 3 a 4

To zależy :) Kolejne wersje OpenGL są wstecznie kompatybilne (pomijając różnice między Core Profile trójki, a wcześniejszymi wersjami). Kod będzie działał tak samo z kontekstem GL 3 i 4. Z drugiej strony, nowsze wersje pozwalają na zrobienie więcej na GPU (dzięki, na przykład, compute shadres, indirect draw, czy atomic load-store), więc kod który faktycznie używa nowych API z 4 będzie się trochę różnił.

Mimo wszystko, zanim dojdziesz do takich tematów, musisz przebrnąć przez podstawy, a tu różnic nie ma, więc zaczynianie od GL 3 jest ok.

i czy ogólnie nauczenie się go jest rozwojowe?

Jeżeli chcesz iść w kierunku programowania grafiki, to jest. Sporo kodu już powstało w GL, nikt nie będzie tego przepisywał na Vulkana dla samego przepisywania. W nowych projektach też GL jest ciągle używany. Poza tym, znając GL o wiele łatwiej będzie wejść w inne API.

Jeżeli nie chcesz iść w tym kierunku, to raczej nie ma sensu poświęcać na to zbyt dużo czasu - chociaż, jak zawsze, podstawy mogą się przydać.

Możecie polecić jakąś literaturę/poradniki?

Learn OpenGL jest dość popularna, dobra na początek. Poza tym blogi, książki typu GPU Gems czy GPU Pro, no i oczywiście wiki OpenGLa i reference manual :)

jeśli możecie się wypowiedzieć na temat bibliotek, których używacie, to z chęcią posłucham

Nie brnij w Xliba, tylko użyj jakiejś biblioteki do wejścia i okienek. SDL2 jest spoko, tak samo jak GLFW, SFML, i pewnie sto innych.

Jeśli jednak się zdecydujesz na czystego GLa, to używaj debuggerów (RenderDoc, ApiTrace) i GL_KHR_debug, zamiast postować na forum i SO tysiące linii kodu z komentarzem "nie działa" ;)

Jeśli potrzebujesz GUI wewnątrz swoich aplikacji, to Dear ImGui jest dobre na start.

2

Chyba Matlab (dla Linuxa Octave) nadałby się i do sztucznej inteligencji i do graficznej reprezentacji wyników ;)

2
Karol Szustakowski napisał(a):

Dlatego rodzą się moje pytania - OpenGL da radę?

Tak, da radę.

Czy lepiej iść od razu w vulkana?

Vulkan jest trudny. Ogromna ilość boilerplate'u który niczemu nie służy. To znaczy: może w grze klasy AAA daje te parę FPSów więcej, kosztem dużego nakładu pracy. Nie rozumiem tego zachwytu nad Vulkanem.

Duże są różnice pomiedzy opengl 3 a 4

Są różnice nawet pomiędzy poszczególnymi wersjami 3.x oraz 4.x. Ale tu nie chodzi o to by używać najnowszej, tylko by najpierw wybrać wersję na podstawie tego jaki sprzęt chcemy obsługiwać. Łatwo jest uzależnić program od np. 4.6 odcinając się od wszystkiego co byłoby wystarczająco wydajne, ale nie ma dość nowych sterowników.
Dlatego moją "ulubioną" wersją jest 2.1 (bo tylko taką wersję ma lapek z którego piszę te słowa...)

0

Dziękuję za tak obszerne wypowiedzi, nie spodziewałem się takiego odzewu :)
Troszkę mi się sytuacja rozjaśniła, póki co popatrzę na podesłane poradniki do opengl i myślę że coś z tego ciekawego na pewno powstanie.
Dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1