PyOpenGl czy pyglet?

Szukam jakiegoś majsterkowania z OpenGL i Pythona i nie byłem w stanie znaleźć dobrych powodów do używania PyOpenGl kontra pyglet

Co polecacie i dlaczego?

Author: Hortitude, 2008-11-11

9 answers

Jak powiedział Tony, to naprawdę będzie zależało od twoich celów. Jeśli jesteś" majstrować", aby spróbować dowiedzieć się o OpenGL lub 3D renderowania w ogóle, że chciałbym zrezygnować z wszelkich uprzejmości i rozpocząć pracę z PyOpenGL, który jest tak blisko masz zamiar dostać się do " raw " 3D programowania przy użyciu Pythona.

Z drugiej strony, jeśli "majsterkujesz" poprzez wyśmiewanie się z gry lub aplikacji multimedialnej, lub próbujesz dowiedzieć się o praktykach programowania w ogóle, to Pyglet zaoszczędzi Ci wiele z góry czas rozwoju przez zapewnienie Hooki dla zdarzeń wejściowych, Dźwięki, tekst / billboarding, itp. Często ta inwestycja z góry uniemożliwia ludziom ukończenie projektów, więc wykonanie jej za Ciebie nie jest czymś, co należy zignorować. (Bardzo ważne jest również unikanie wymyślania koła na nowo.)

Jeśli chcesz wykonać jakieś ciężkie podnoszenie (które zwykle wykracza poza moją definicję "majsterkowania" , ale może nie, jeśli majsterkujesz przy konstrukcji silnika 3D), to może warto spojrzeć na Python-Ogre, który owija bardzo w pełni funkcjonalny i solidny Ogre 3D silnik graficzny.

 29
Author: bouvard,
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
2018-03-17 08:50:24

Zacznij od pygleta. Zawiera najlepsze API wysokiego poziomu, które zawiera wszystko, czego potrzebujesz, aby zacząć, od otwarcia okna do rysowania sprite 'ów i prymitywów OpenGL przy użyciu przyjaznych i potężnych klas Sprite' ów i wsadowych.

Później możesz również napisać własny kod niższego poziomu, który wywołuje bezpośrednio funkcje OpenGL, takie jak glDrawArrays, itp. Możesz to zrobić używając OpenGL OpenGL pygleta lub używając PyOpenGL. dobrą wiadomością jest to, że niezależnie od tego, którego używasz, możesz Wstaw takie wywołania bezpośrednio w środku istniejącej aplikacji pyglet, a będą "po prostu działać". Przejście kodu z Pyglet do PyOpenGL jest dość łatwe, więc nie jest to decyzja, o którą musisz się martwić z góry. Pomiędzy tymi dwoma są:

Powiązania PyOpenGL czynią interfejs OpenGL bardziej przyjaznym i pythonicznym. Na przykład możesz przekazać tablice wierzchołków w wielu różnych formach, tablice ctypów, tablice numpy, listy zwykłe itp., a PyOpenGL przekonwertuje w coś, co OpenGL może wykorzystać. Takie rzeczy sprawiają, że PyOpenGL jest naprawdę łatwy i wygodny.

Powiązania OpenGL Pygleta są generowane automatycznie i nie są tak przyjazne w użyciu jak PyOpenGL. Na przykład, czasami trzeba będzie ręcznie tworzyć obiekty ctypes, aby przekazać do OpenGL' C pointer ' rodzaje args. To może być skrzypiące. Plusem jest jednak to, że wiązania pygleta są znacznie szybsze.

Oznacza to, że istnieje optymalny środek: użycie pyglet do okien, zdarzeń myszy, dźwięku itp. Następnie użyj przyjaznego API PyOpenGL, gdy chcesz wykonywać bezpośrednie wywołania funkcji OpenGL. Następnie podczas optymalizacji zastąp tylko niewielki procent krytycznych dla wydajności wywołań PyOpenGL, które znajdują się w wewnętrznej pętli renderowania, odpowiednikami pygleta. Dla mnie to daje mi od 2 do 4 razy szybsze framerate, z wygodą PyOpenGL dla 90% mojego kodu.

 30
Author: Jonathan Hartley,
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
2010-11-22 14:21:04

Powiedziałbym, że Pyglet jest bardziej rozwinięty niż PyOpenGL. Ma ładne API własnego, i ma pełny wrapper wokół OpenGL dostęp przez pyglet.gl moduł! PyOpenGL nie owija nawet wszystkich funkcji jakie posiada OpenGL. Pyglet ma również świetną bibliotekę do renderowania 2D z akceleracją sprzętową przez OpenGL i jest naprawdę dobrze wykonana.

Jeśli chcesz mieć potężny gotowy silnik 3D masz Ogre i takie

 6
Author: Zoomulator,
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
2009-01-03 12:25:09

Spróbuj ModernGL .

pip install ModernGL
  • PyOpenGL jest automatycznie wygenerowaną wersją oryginalnego API OpenGL (generowanego za pomocą SWIG). Oryginalne API OpenGL nie jest przyjazne dla Pythona. Wygenerowane wiązania Pythona są trudne w użyciu.

  • Pyglet jest przeznaczony głównie do tworzenia okien i obsługi zdarzeń, ale możesz mieć API podobne do PyOpenGL (na przykład pyglet.gl.glClearColor)

  • Pygame dostarcza okno, w którym można użyć PyOpenGL do rendering.

  • ModernGL jest świetną alternatywą dla PyOpenGL, można korzystać z nowoczesnego API OpenGL z mniejszą ilością napisanego kodu. ModernGL nie utworzy okna samodzielnie, ale można go zintegrować w pyglet, pygame, PyQt5 a nawet w GLUT .

W ModernGL możesz utworzyć prosty program shader za pomocą jednego wywołania:

prog = ctx.program(
    vertex_shader='''
        #version 330
        in vec2 in_vert;
        void main() {
            gl_Position = vec4(in_vert, 0.0, 1.0);
        }
    ''',
    fragment_shader='''
        #version 330
        out vec4 f_color;
        void main() {
            f_color = vec4(0.3, 0.5, 1.0, 1.0);
        }
    ''',
)

Z ModernGL masz pełną kontrolę nad API OpenGL.

 6
Author: Szabolcs Dombi,
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
2018-09-13 07:11:13

Pyglet ma wiele fajnych dodatków (takich jak ładowanie obrazu i dźwięk). Jeśli zaczynasz, najpierw spróbowałbym pyglet, a potem przełączyć się na PyOpenGL, jeśli czujesz, że chcesz zbliżyć się do metalu.

Naprawdę ważne pytanie brzmi: co próbujesz osiągnąć?

 4
Author: Tony Arkles,
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
2008-11-11 03:38:00

Promuję pygleta, ponieważ ma najładniejsze API jakie widziałem na takich rzeczach.

Pyglet ma również API opengl. Ale często przyjemniej jest korzystać z ostatnio dodanej obsługi listy wierzchołków.

Pyglet.gl

 4
Author: Cheery,
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
2008-11-11 16:30:11

Hmm, sugerowałbym pyglet, naprawdę zapewnia wszystko, co potrzebne do gry lub aplikacji.

Pamiętaj, że możesz zrobić wiele rzeczy pyglet za pomocą PyOpenGL, na przykład, aby utworzyć okno, wystarczy:
glutInitWindow (tytuł)

Chociaż myślę, że glutInitDisplayMode musi być wywołane wcześniej.

Proste podsumowanie: jeśli nie chcesz kodować dopóki nie płaczesz, wybierz pyglet, ale jeśli chcesz być mistrzem, wybierz PyOpenGL. Goto http://pyopengl.sourcefourge.net aby przeczytać dokumenty na PyOpenGL i http://pyglet.org aby przeczytać dokumenty na pyglet. Mam nadzieję, że to było pomocne!

 4
Author: Uchiha Madara,
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-12-08 20:30:29

Polecam Pyglet, ponieważ bardzo łatwo jest zacząć i mieć coś podstawowego, a następnie można dodać bardziej zaawansowane techniki we własnym tempie.

 3
Author: Kiv,
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
2008-12-29 02:52:47

Pyglet 's GL API nie jest tak ładne jak PyOpenGL' s - pyglet ' s znajduje się na warstwie surowych ctypów, co oznacza, że będziesz musiał nauczyć się ctypów. Jeśli planujesz zrobić kilka OpenGL programowania będziesz chciał użyć PyOpenGL.

Fajne jest to, że można dobrze wymieszać te dwa. Użyj pygleta, aby zapewnić kontekst GL, Dźwięki, zdarzenia, ładowanie obrazów i zarządzanie teksturami, renderowanie tekstu itp. Użyj PyOpenGL do rzeczywistego programowania OpenGL, które musisz zrobić.

 3
Author: Richard Jones,
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
2010-03-07 11:17:49