كيفية تمكين أخذ العينات المتعددة لبرنامج wxWidgets OpenGL؟

StackOverflow https://stackoverflow.com/questions/21560

  •  09-06-2019
  •  | 
  •  

سؤال

تعدد العينات هي طريقة للتطبيق مكافحة التعرجات على كامل الشاشة (FSAA) في التطبيقات ثلاثية الأبعاد.أحتاج إلى استخدام تعدد العينات في برنامج OpenGL الخاص بي، والذي هو مضمن حاليًا في ملف wxWidgets واجهة المستخدم الرسومية.هل هناك طريقة للقيام بذلك؟يرجى الرد فقط إذا كنت تعرف الخطوات التفصيلية لتحقيق ذلك.

أنا على علم بتمكين أخذ العينات المتعددة باستخدام WGL (امتدادات Win32 إلى OpenGL).ومع ذلك، نظرًا لأن برنامج OpenGL الخاص بي غير مكتوب في MFC (وأريد أن يكون الكود محمولاً على منصات متعددة)، فهذا ليس خيارًا بالنسبة لي.

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

المحلول

أخيرًا حصلت على Multisampling مع برنامج wxWidgets OpenGL الخاص بي.إنه أمر فوضوي بعض الشيء الآن، ولكن إليك الطريقة:

wxWidgets لا يملك تعدد العينات الدعم فيهم إصدارات مستقرة الآن (أحدث إصدار في هذا الوقت هو 2.8.8).ولكنه متاح كتصحيح وأيضًا من خلال اللقطة اليومية.(هذا الأخير أمر مشجع، لأنه يعني أنه تم قبول التصحيح ويجب أن يظهر في الإصدارات المستقرة اللاحقة إذا لم تكن هناك مشاكل.)

إذن، هناك خياران:

  1. قم بالتنزيل والبناء من ملفاتهم لقطة يومية.

  2. احصل على ال رقعة لتثبيت wxWidgets الخاص بك.

لقد وجدت أن الخيار الثاني أقل تعقيدًا، لأنني لا أريد إزعاج عملية التثبيت الخاصة بي قدر الإمكان.إذا كنت لا تعرف كيفية التصحيح على نظام التشغيل Windows، فراجع هذا.

على الأقل، بالنسبة لنظام التشغيل Windows، سيقوم التصحيح بتعديل الملفات التالية:

$(WX_WIDGETS_ROOT)/include/wx/glcanvas.h
$(WX_WIDGETS_ROOT)/include/wx/msw/glcanvas.h
$(WX_WIDGETS_ROOT)/src/msw/glcanvas.cpp

بعد التصحيح، إعادة الترجمة مكتبات wxWidgets.

لتمكين أخذ العينات المتعددة في برنامج wxWidgets OpenGL الخاص بك، يلزم إجراء تغييرات طفيفة على التعليمات البرمجية.

يجب تمرير قائمة السمات إلى wxGLCanvas البناء:

int attribList[] = {WX_GL_RGBA,
                    WX_GL_DOUBLEBUFFER,
                    WX_GL_SAMPLE_BUFFERS, GL_TRUE, // Multi-sampling
                    WX_GL_DEPTH_SIZE, 16,
                    0, 0};

إذا كنت تستخدم بالفعل قائمة السمات، فقم بإضافة السطر with GL_SAMPLE_BUFFERS, GL_TRUE إليها.بخلاف ذلك، قم بإضافة تعريف قائمة السمات هذا إلى التعليمات البرمجية الخاصة بك.

ثم قم بتعديل مُنشئ wxGLCanvas الخاص بك ليأخذ قائمة السمات هذه كمعلمة:

myGLFrame::myGLFrame    // Derived from wxGLCanvas
(
    wxWindow *parent,
    wxWindowID id,
    const wxPoint& pos,
    const wxSize& size,
    long style,
    const wxString& name
)
: wxGLCanvas(parent, (wxGLCanvas*) NULL, id, pos, size, style, name, attribList)
{
    // ...
}

بعد إنشاء عنصر wxGLCanvas، يتم تشغيل أخذ العينات المتعددة بشكل افتراضي.لتعطيله أو تمكينه حسب الرغبة، استخدم استدعاءات OpenGL ذات الصلة:

glEnable(GL_MULTISAMPLE);
glDisable(GL_MULTISAMPLE);

يجب أن يعمل أخذ العينات المتعددة الآن مع برنامج wxWidgets OpenGL.نأمل أن يتم دعمها في الإصدار الثابت لـ wxWidgets قريبًا، مما يجعل هذه المعلومات غير ذات صلة :-)

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