الصفحة الرئيسية/ التقنية / تفعيل شاشة OpenGL : دورة OpenGL لغة c++ الدرس الثاني

تفعيل شاشة OpenGL : دورة OpenGL لغة c++ الدرس الثاني


for Large تمت الكتابة بواسطة : محمد

for Large for Mobile

تفعيل شاشة OpenGL يتطلب إجراء عملية ربط لـ المكتبات.

وبالتالي يجب تفعيل مكتبتي GLEW و GLFW على بيئه محرر Visual Studio.

سوف يتم مسح أي صفحة تم ملؤها بالبيانات في الدرس السابق من خلال تفعيل شاشة OpenGL .

في هذا الدرس سوف يتم اضافة ملف جديد باسم main.cpp.

يحتوي الملف على دالة سي الرئيسية main.

ثم بعد ذلك يتم تضمين صفحات أخرى إن استدعى الأمر.

 

 

 

التحقق من ملفات GLEW

تمثل ملفات static تكوين الربط الثابت للمكتبة حيث يتم من خلالها تفعيل المكتبة بواسطة ملفات Binaries. [1]

بالتالي لا يمكن الخوض حول آلية عملها فقط يتطلب منا تحرير الملف الثنائي الفردي.[1]

بينما تتم عمليه الربط الديناميكي للمكتبه وفقا لملفات dll والتي سوف يتم تضمينها لاحقا في ملفات المشروع. 

 ولا شك بأن التنظيم يساعد في استغلال حيز كبير للبرامج وخاصة في المشاريع الكبيرة.[1]

أما في حال ما قرر المطور ربط مكتبة GLEW الثابتة.[1] 

فإن ذلك يتطلب تعيين متغير ثابت قبل ملفات include لتصبح تمامًا مثل :

#define GLEW_STATIC
#include <GL/glew.h>

على سبيل المثال تبدو صفحة main.cpp الرئيسية بعد عملية الربط على النحو التالي:

#include <iostream>

#define GLEW_STATIC
#include <glew.h>

#include <glfw3.h>

void main()
{

}

في حال نجاح بناء المشروع يجب أن يخلو الكود من الأخطاء أما في حال ظهور الأخطاء من جديد.

يجب التأكد من ربط المكتبات التي تم شرحها في الدرس الأول مكتبة اوبن جل.

تفعيل شاشة OpenGL

 

أدوات تفعيل شاشة OpenGL

يمكن تمثيل الصفحات الأولى في تفعيل شاشة OpenGL من خلال إضافة دوال خاصة للمكتبة داخل الدالة main.cpp.

ونضع بعين الاعتبار إجراء عملية build في كل مرة يتم تعديل الشيفرة حيث أن ذلك من شأنه السيطرة على مسار الأخطاء.

glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);

  يتم تفعيل دالة التهيئة glfwInit حيث تقوم بتحضير صفحة الرسم باعتبارها أول وظيفة من وظائف تفعيل شاشة OpenGL.[1]

بينما يليها وظائف glfwWindowHint التي تتعلق باعدادات صندوق العرض وكرت الألوان في البطاقة القياسية.[2]

على سبيل المثال عادة ما تدل القيمة GLFW RESIZABLE على تمكين وتعطيل عملية تكبير أو تصغير صندوق العرض عند بناء الكود.  

كائن الشاشة

يتيح كائن الشاشة GLFW window* الإمساك بحدود الرسم طوال فترة تشغيل البرنامج[1].

على سبيل المثال عند تفعيل شاشة OpenGL يتم إخضاع البرنامج لقواعد لا يتم تجاوزها مثل أبعاد الطول والعرض الثابتة وعنوان الشاشة الرئيسية.

ويحمل المتغير GLFWwindow* صفة المؤشر في لغة c++ يمكن مراجعة درس المؤشرات لفهم آلية عملها.

يتطلب منا تعريف مؤشر بعنوان window ليتم الإعلان عنه خارج حدود دالة main.cpp تمامًا مثل الكود التالي :

GLFWwindow*window;

وبداخل الدالة main يتم إرجاع القيم له عن طريق الكود التالي :

GLFWwindow* window = glfwCreateWindow(800, 600, "First OpenGL Page", nullptr, nullptr);

بعد ذلك يمكن إضافة شرط التحقق في نجاح تكوين الشاشة من فشلها بإضافة الكود التالي :

if (window == nullptr)
    {
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
    }

الكود السابق هو عبارة شرطية بسيطة تكشف أخطاء تفعيل شاشة OpenGL.

بالتالي هي ليست إلزامية وإنما من المستحسن إضافتها في الكود.

وفي حال استخدام دالة main من نوع int يفضل إضافة return -1 بداخلها ليتم كشف حالة التكوين من شاشة الكونسول.

glfwMakeContextCurrent(window);

الأمر glfwMakeContextCurrent وهو سياق وخيوط المعالجة التي تستلم نتائج وعمليات كائن الشاشة المنطقية.

تعمل هذه الدالة على تفعيل معالجة البيانات التي تم تعبئتها مسبقًا فهي تعمل بمثابة نظام Context خلال تفعيل شاشة OpenGL.  

 

إدارة المؤشرات glew

تتيح مكتبة glew عملية تنسيق وإدارة المؤشرات والوظائف في مكتبة OpenGL.

ولذلك كان لا بد من استدعاء بعض المهام الإضافية منها.[1]

بالتالي يستطيع الأمر glow Experimental إدارة وتحسين وظائف المكتبة الرسومية بتقديم مهام أكثر ديناميكية.[1]

نقوم الآن بنسخ الكود التالي في بداية دالة main.cpp.[1]

glewExperimental = GL_TRUE;

في حال ما ظهرت أخطاء تتعلق بــ MSVCRT نعمل على مسح glow Experimental من الشيفرة.

 

ملف glew32.dll

يمكن العثور على ملف glew32 من داخل مكتبة GLEW في الامتداد الذي قمنا بإعداده سابقًا.

C:GLglew-2.2.0-win32glew-2.2.0inReleaseWin32

يجب نسخ ملف glew32.dll داخل ملفات المشروع في ملف Debug لكي تعمل المكتبة.

ضبط ملفات glew

ضبط منفذ العرض viewport

قبل البدء في العرض يتطلب إخبار مكتبة OpenGL لمنافذ العرض التي سوف تعمل على تكوين شاشة العرض.

على سبيل المثال توفر دالة glViewport نقاط يتم اعتمادها من بطاقة العرض.

وبالتالي فإن العرض سوف يتم بناء على نقاط البداية والنهاية.

glViewport(0, 0, 800, 600);

عند نسخ الدالة السابقة في المشروع نجد أن منفذ العرض مكون من احداثيات البدء في النقاط X Y.

على سبيل المثال تمثل قيمتي 0 و 0 اقصى يسار النافذة التي سيتم فتحها.[1]

بالإضافة إلى إحداثيات النهاية والمتمثلة بـ x=800 للعرض و y = 600 للارتفاع.

تمثل القيم السابقة حجز مساحة من مكان العرض عند تفعيل شاشة OpenGL.[1]

لا تمثل viewport اماكن استدعاء الكائنات بينما تحدد المساحة التي سيتم من خلالها تمثيل الاستدعاءات.  

تفعيل شاشة OpenGL بشكل دائم

نلاحظ عند تشغيل الكود السابق سوف يعمل البرنامج ثم ينتهي بالإغلاق فوراً.

وذلك بسبب أننا لم نمكن أحداث الشاشة من العمل باستمرار.[1]

لتجاوز تلك المسألة يجب وضع حلقة تكرارية تمكن الشاشة من عرض الإطارات باستمرار.[1]

while(!glfwWindowShouldClose(window))
{
glfwPollEvents();
glfwSwapBuffers(window);
}

تفحص الدالة glfwWindowShouldClose فيما لو أننا لم نقم باغلاق التطبيق وبالتالي فهي تتيح لنا العمل باستمرار دون الخروج التلقائي منه.

بينما الدالة glfwPollEvents تحدد قيمة callback المتعلقة بتفاعل المستخدم مع الشاشة مثل استخدام الفأرة أو لوحة المفاتيح وتمرر بيانات الإدخال إلى المكتبة ليتم معالجتها.

تتولى دالة glfwSwapBuffers تمرير القيم الجديدة من الإحداثيات مع استمرار الرسم وملئ كل بيكسل بالألوان التي تأثرت بقيم الإدخال أو معادلة الرسم.  

 

يتم استخدام Double buffer خلال عرض المشهد وذلك بسبب أن مخزن واحد سيعمل على وميض الصفحة أثناء المجريات الجديدة.
على سبيل المثال حركة الكائنات أو تغيير الإضاءة [1], بالتالي فإن خصائص Double buffer تمكن تفعيل شاشة OpenGL بانسيابية مع اخفاء كواليس الرسم والتحويل.[1]

 

تنظيف الذاكرة

تتولى دالة glfwTerminate عمليات تنظيف الذاكرة بعد الخروج من البرنامج ، فهي تضمن عدم تراكم كومة القمامة في ذاكرة الحاسوب.

glfwTerminate();

على سبيل المثال ، تعمل glfwTerminate على الخروج من البرنامج بشكل صحيح.

يجب أن تسير الأمور على ما يرام ، من أجل رؤية النتائج كما في الصورة التالية.

 

تفعيل شاشة OpenGL

         

المراجع
  1. [1]^ كتاب ـــــــ offline learn OpenGL created by Joey de Vries.
  2. [2]^ GLFW Window guide ______ window hint.

وقت النشر : 2023-02-04 20:17:05 ·

1    التصنيفات






2    مقالات من التقنية

يعتمد هذا الموقع على عرض الإعلانات في تحقيق الدخل ، نشكر تفهمكم الدائم ونتمنى لكم قضاء وقت رائع ... وشكراً :D .