سؤال

إنني أتطلع إلى إجراء بعض التعديلات على openGL وPython ولم أتمكن من العثور على أسباب وجيهة لاستخدام PyOpenGl مقابل pyglet

التي تنصحين ولماذا؟

هل كانت مفيدة؟

المحلول

وكما قال توني، وهذا هو حقا تعتمد على أهدافك. إذا كنت "ترقيع" في محاولة لمعرفة المزيد عن برنامج OpenGL أو تقديم 3D بشكل عام التي أود أن تستغني عن المجاملات وبدء العمل مع PyOpenGL، الذي هو أقرب ما كنت تريد الذهاب للوصول الى "الخام" البرمجة 3D باستخدام بايثون .

من ناحية أخرى، إذا كنت "ترقيع" عن طريق السخرية حتى لعبة أو تطبيق الوسائط المتعددة، أو محاولة للتعرف على الممارسات البرمجة بشكل عام من Pyglet سيوفر لك الكثير من الوقت اللازم لتطوير مقدما من خلال توفير السنانير للأحداث المدخلات والأصوات والنصوص / billboarding، وما إلى ذلك في كثير من الأحيان، وهذا الاستثمار مقدما هو ما يمنع الناس من إكمال مشاريعهم، وبعد ذلك يتم بالنسبة لك ليست شيئا لا يمكن تجاهله. (وهو أيضا Pythonic جدا لتجنب إعادة اختراع العجلة).

إذا كنت تبحث للقيام بأي نوع من رفع الثقيلة (التي تقع عادة خارج تعريفي لل"ترقيع"، ولكن ربما ليس إذا كنت ترقيع تصميم محرك 3D) فإنك قد ترغب في إلقاء نظرة على بيثون الغول، الذي يلتف <م> جدا كامل المواصفات وقوية الرسومات الغول 3D المحرك.

نصائح أخرى

وتبدأ pyglet. أنه يحتوي على أفضل API رفيع المستوى، الذي يحتوي على كل ما تحتاجه للبدء من فتح نافذة لرسم العفاريت والأوليات OpenGL باستخدام العفريت دفعة والطبقات ودية وقوية لهم.

وفي وقت لاحق، قد ترغب أيضا في الكتابة الخاصة رمز مستوى أقل الخاص، وهذا يجعل المكالمات مباشرة إلى وظائف بينغل مثل glDrawArrays، وما إلى ذلك يمكنك القيام بذلك باستخدام الارتباطات برنامج OpenGL pyglet ل، أو باستخدام وPyOpenGL. والخبر السار هو أن أيهما الذي تستخدمه، يمكنك إدراج مثل هذه الدعوات الحق في منتصف تطبيق pyglet الموجودة لديك، وأنها سوف "تعمل فقط". الانتقال التعليمات البرمجية من Pyglet إلى PyOpenGL من السهل إلى حد ما، لذلك هذا ليس قرارا تحتاج للقلق حول جدا مقدما من ذلك بكثير. الحرف حالا بين هما:

والارتباطات PyOpenGL تجعل واجهة برنامج OpenGL أكثر ودية وpythonic. على سبيل المثال، يمكنك تمرير صفائف قمة الرأس في العديد من الأشكال المختلفة، ctypes المصفوفات، مصفوفات نمباي، وقوائم واضحة، وغيرها، وPyOpenGL وتحويلها إلى شيء يمكن استخدام برنامج OpenGL. مثل هذه الامور تجعل PyOpenGL السهل حقا ومريحة.

يتم إنشاء

وربط برنامج OpenGL pyglet تلقائيا، وليست صديقة الاستخدام كما PyOpenGL. على سبيل المثال، في بعض الأحيان سيكون لديك لإنشاء كائنات ctypes يدويا، من أجل تمرير "C مؤشر" أنواع وسائط إلى برنامج OpenGL. هذا يمكن أن يكون ذكي. على الرغم من أن الجانب الايجابي، هو ربط pyglet تميل إلى أن تكون أسرع بكثير.

وهذا يعني أن هناك أرضية مثلى الوسطى: استخدام pyglet عن النوافذ، أحداث الماوس، والصوت، وما إلى ذلك ثم استخدام API دية PyOpenGL عندما تريد إجراء مكالمات وظيفة برنامج OpenGL المباشر. ثم عند تحسين استبدال فقط نسبة صغيرة من المكالمات PyOpenGL الأداء النقدي التي تقع داخل بك الداخلية تقديم حلقة مع حكمه pyglet. بالنسبة لي، وهذا يعطيني ما بين 2 و 4 مرات فراميراتس أسرع، مع الراحة PyOpenGL ل90٪ من قانون بلدي.

يحاول ModernGL.

pip install ModernGL
  • باي أوبن جي إل هو إصدار تم إنشاؤه تلقائيًا من واجهة برمجة تطبيقات OpenGL الأصلية (التي تم إنشاؤها باستخدام SWIG).واجهة برمجة تطبيقات OpenGL الأصلية ليست صديقة لبيثون.من الصعب استخدام روابط بايثون التي تم إنشاؤها.

  • بيجليت مخصص في الغالب لإنشاء النوافذ ومعالجة الأحداث، ولكن يمكنك استخدام PyOpenGL مثل واجهة برمجة التطبيقات (على سبيل المثال pyglet.gl.glClearColor)

  • pygame يوفر نافذة حيث يمكنك استخدام PyOpenGL للقيام بالعرض.

  • ModernGL يعد بديلاً رائعًا لـ PyOpenGL، ويمكنك استخدام واجهة برمجة تطبيقات OpenGL الحديثة مع كتابة تعليمات برمجية أقل.لن يقوم ModernGL بإنشاء نافذة بمفردها، ولكن يمكنك دمجها فيها بيجليت, pygame, باي كيو تي 5 وحتى في تخمة.

في ModernGL يمكنك إنشاء برنامج تظليل بسيط بمكالمة واحدة:

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);
        }
    ''',
)

مع ModernGL، يمكنك التحكم الكامل في OpenGL API.

وانا اقول ان Pyglet هو في الواقع أكثر تطورا من PyOpenGL. أنه يحتوي على API لطيفة منه الخاصة، وولها المجمع الكامل حول برنامج OpenGL الوصول إليها من خلال وحدة pyglet.gl! PyOpenGL حتى لا التفاف جميع وظائف برنامج OpenGL. لديها Pyglet أيضا مكتبة كبيرة لتقديم 2D مع تسارع من خلال برنامج OpenGL، وانها حقا جيدة الصنع.

إذا كنت تريد قوية جاهزة محرك 3D كنت قد حصلت على الغول و مثل

وpyglet لديه الكثير من إضافات جميلة شملت معها (مثل تحميل الصور والصوت). إذا كنت البدء، كنت أحاول pyglet أولا، ومن ثم التبديل إلى PyOpenGL إذا كنت تشعر وكأنك تريد أن تقترب من المعدن.

والسؤال المهم الحقيقي على الرغم هو: ما تحاول تحقيقه؟

وأنا تعزيز pyglet لأنه يحتوي على اجمل API رأيت بعد على مثل هذه الاشياء.

وPyglet ديه API بينغل كذلك. ولكن في كثير من الأحيان أجمل لاستخدام إضافتها مؤخرا دعم قائمة قمة الرأس.

وpyglet.gl

وهم، وأود أن أقترح pyglet، فإنه في الحقيقة يوفر كل ما يلزم من لعبة أو تطبيق.

والعقل لك، يمكنك أن تفعل الكثير من الأشياء pyglet الحال مع PyOpenGL، على سبيل المثال لإنشاء إطار كل ما عليك القيام به هو:
glutInitWindow (العنوان)

وعلى الرغم من أنني أعتقد glutInitDisplayMode ديه ليتم استدعاؤها قبل ذلك.

وملخص بسيط: إذا كنت لا تريد كود حتى كنت أبكي، واختيار pyglet، ولكن إذا كنت تريد أن تكون على درجة الماجستير، واختيار PyOpenGL. انتقل الى http://pyopengl.sourcefourge.net لقراءة المستندات على PyOpenGL و<لأ href = "HTTP: //pyglet.org "يختلط =" نوفولو "> http://pyglet.org لقراءة المستندات على pyglet. نأمل أن يكون هذا كان مفيدا!

وأوصي Pyglet لأنه من السهل جدا أن تبدأ، والحصول على شيء تشغيل الأساسي، وبعد ذلك يمكنك إضافة المزيد من التقنيات المتقدمة في وتيرة الخاصة بك.

وAPI GL pyglet هو في مكان قريب لطيفا كما في PyOpenGL - pyglet هو في طبقة ctypes الخام، مما يعني أنك سوف تحتاج إلى معرفة ctypes كذلك. إذا كنت تخطط للقيام حفنة من OpenGL البرمجة سترغب في استخدام PyOpenGL.

والشيء الجميل هو يمكنك خلط اثنين على ما يرام. استخدام pyglet لتوفير سياق GL والأصوات والأحداث، وتحميل الصور وإدارة الملمس، وجعل النص، الخ، الخ استخدام PyOpenGL لبرمجة برنامج OpenGL الفعلية ما عليك القيام به.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top