مكتبة الرسوميات المفتوحة

**مكتبة الرسوميات المفتوحة** أو **أوبن جي إل** (**Open** **G**raphics **L**ibrary) عبارة عن واجهة برمجة التطبيقات مستقلة المنصة (تعمل في عدة بيئات وعدة أنظمة تشغيل) متوافقة مع عدة لغات مصممة لإنتاج رسوميات الحاسب ثنائية الأبعاد وثلاثية الأبعاد. تحوي الواجهة أكثر من 250 استدعاء دالي مختلف يمكن استخدامها لرسم مناظر ثلاثية الأبعاد معقدة باستخدام مكوّنات هندسيّة بسيطة كنقط والخطوط والمضلّعات. في عالم رسومات الحاسب تعرف هذه المكوّنات باسم *البدائيَات*. تم تطوير الأوبن جي إل في البدء من قبل شركة سيليكون غرافيكس ثم حققت شيوعا وانتشارا كبيرين في ألعاب الفيديو حيث تتنافس مع دايركت ثري دي على منصات مايكروسوفت ويندوز. يستخدم أوبن جي إل بشكل واسع في تطبيقات الكاد والواقع الافتراضي، والتمثيل المرئي العلمي والتمثيل المرئي للمعلومات، ومحاكاة الطيران وفي تطبيقات متنوّعة أخرى لها صلة بميدان رسومات الحاسوب.

## تصميم المكتبة

يسار|تصغير|520بك|هيكلة ماسورة الرسومات الخاصّة بالمكتبة

تم تصميم المكتبة على أساس محورين أساسييّن هما:
* توفير واجهة موحّدة وسهلة للوصول إلى قدرات المكوّنات الصلبة في الرسومات وخاصّة الثلاثيّة الأبعاد منها.
* إخفاء الاختلافات المتواجدة بين شتّى أنواع المنصّات الصلبة عبر إجبار كلّ الإنجازات المتوافقة على دعم جميع الميّزات المعرّفة في المواصفات.

تتمثّل المهمّة الرئيسيّة للمكتبة في التعرّف على البدائيّات الهندسيّة (نقط، خطوط ومضلّعات أساسا) ومن ثمّ تحويلها إلى مجموعة من العنصورات. تعرف هذه العمليّة في عالم رسومات الحاسب بماسورة الرسوميات. أغلب استدعاءات أو بالأصحّ آوامر المكتبة تقوم أساسا بوصف خصائص البدائيّات (أساسا الإحداثيّات) أو في بعض الأحيان توفير بعض التوجيهات إلى الماسورة لتعديل كيفيّة معالجتها للبدائيّات.

## مثال عملي

تصغير|لقطة شاشة للتطبيق مع المربّع الأبيض

مثال بسيط لرسم مربّع أبيض على الشاشة باستخدام لغة السي، نقوم أوّلا بإرسال أمر مسح الشاشة (glClear):

```c
glClear(GL_COLOR_BUFFER_BIT);
```

ثمّ نحدّد زاوية الرؤية وكيفيّة الإسقاط داخل الماسورة:

```c
glMatrixMode(GL_PROJECTION); /* أمر إعلام بوجوب تغيير مصفوفة الإسقاط */
glLoadIdentity(); /* إدخال مصفوصة، هذا الأمر يرسل ببساطة مصفوفة وحدة */
glOrtho(.0, 1.0,.0, 1.0, -1.0, 1.0); /* تحديد معيّن الإسقاط */
```

الآن بعد مسح الشاشة وتحديد أوامر الإسقاط يمكننا البدء في الرسم على المعيّن الجديد. سنقوم برسم بدائيّة تتمثّل في مربّع. للقيام بهذا نحتاج لإرسال أوامر تحدّد إحداثيات النقط الأربعة المشكّلة للمربّع:

```c
glColor3f(1.0f, 1.0f, 1.0f); /* تحديد لون الرسم، في هذه الحالة أبيض */

glBegin(GL_POLYGON); /* تحديد نوع البدائيّة التّي نريد رسمها، هنا حدّدنا النوع كمضلّع */
		glVertex3f(0.25f, 0.25f,.0f); /* إحداثيّات النقطة الأولى للمربّع */
		glVertex3f(0.75f, 0.25f,.0f); /* إحداثيّات النقطة الثانية للمربّع */
		glVertex3f(0.75f, 0.75f,.0f); /* إحداثيّات النقطة الثالثة للمربّع */
		glVertex3f(0.25f, 0.75f,.0f); /* إحداثيّات النقطة الرابعة للمربّع */
glEnd(); /* إمر إخطار بنهاية سرد الإحداثيّات للمضلّع المطلوب */

glFlush(); /* إمر بتنفيذ كلّ الأوامر والرسم على الشاشة */
```


إن واجهة الـ OpenGL تتألف من أكثر من 250 وظيفة مختلفة والتي يمكن استخدامها لرسم مشاهد معقدة ثلاثية الأبعاد.
لقد طورت هذه اللغة بواسطة شركة Silicon Graphics في عام 1992 والتي تستخدم ضمن الـ CAD والواقع الافتراضي والتصور العلمي.. إلخ.
كما أنها تستخدم في ألعاب الفيديو حيث أنها تتنافس مع Direct3D على منصات مايكروسوفت ويندوز.

## مواصفات أوبن جي إل

في أبسط مستوي لأوبن جي إل هي عبارة عن مواصفات، بمعنى آخر وبسيط هي عبارة عن مستند يصف مجموعة من المهام الدقيقة والسلوكيات التي يجب أن تؤديه.

**مثال بسيط:** إن أي لعبة تستخدم جرافيكس ضخمة تحتاج لوصول مباشر إلى كرت الشاشة فهذا الوصول يتم عن طريق استخدام الـ OpenGL والتي يستخدم منصة API بدلا من الـ Virtual Machine كـ NET. Framework

تعمل هذه الواجهة كحلقة وصل بين أي برنامج وبين مجموعة من المزايا المقدمة في النظام... وهي مقسمة إلى عدة أقسام منها على سبيل المثال Direct3D وهذه المكتبة خاصة بعملية التواصل بين البرنامج والمسرع الرسومي ومنها أيضا DirectSound وهذه خاصة بعمليات التواصل بين البرنامج وبطاقة الصوت...

OpenGL هي مكتبة أخرى طورتها شركة SGI وحاليا تطورها مجموعة  Khronos Group... تمكنك من التواصل مع المسرع الرسومي بشكل أسهل وهي تنافس مكتبة Direct3D والتي تطورها مايكروسوفت

إذا أردنا مثالا بسيطا عن مهمة هذه المكتبة

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

أما حين استخدام واجهة Direct3D فالذي عليك فعله أولا هو استدعاء أوامر المكتبة وستحتاج هنا لمكتبة Direct3D فقط من مجموعة مكتبات DirectX
ثم تأمرها برسم المضلعات (وهي أشكال ثلاثية الأضلاع في عالم ثلاثي الأبعاد تكون الأساس الخاص بكل الرسومات الثلاثية الأبعاد) وتحدد نقاط كل مضلع الثلاث في الفضاء الثلاثي وتحدد لونه ونوعه والكثير من مزاياه مثل المواد وغيرها ثم تنتهي لتتولى المكتبة بعد ذلك عملية مخاطبة المسرع الرسومي ورسم كل الأمور بشكل أسهل بكثير مما لو قمت برسم كل شي يدويا

طبعا قد تتساءل أولا تتطلب هذه العملية قوة معالجة إضافية لتحويل البيانات ؟؟؟

سنقول لك لا لأن المسرع الرسومي يأتي بدعم مسبق لهذه التعليمات... لهذا ترى المسرعات الحديثة تدعم مكتبة DirectX 9 بينما القديمة DirectX 8.1 والتي قبلها 8 و7.1 و7 وهكذا...
يقوم المعالج الرسومي تلقائيا برسم هذه الأوامر أي أنه أصبح يفهم أوامر الـ DirectX والـ OpenGL دون الحاجة للترجمة

ولكن عيب هذه الطريقة انك بحاجة لتطوير المسرع كلما ظهرت نسخة جديدة من DirectX أو OpenGL وكل نسخة جديدة تتضمن مزايا أكثر وقوة أكبر وتحسينات إضافية... وعلى فكرة لأن سرعة تطور DirectX أكبر من سرعة تطور OpenGL ولكن OpenGL أغنى من DirectX ولكنه أصعب أيضا... لهذا يستخدم OpenGL في البرامج الرسومية المحترفة وتوجد نسخ خاصة من البطاقات الرسومية تقدم دعما أقوى لهذه الواجهة.

## مراجع

## وصلات خارجية

* 

*
تصنيف:معايير الرسوميات
تصنيف:برمجيات 1992
تصنيف:برمجيات تطوير ألعاب الفيديو
تصنيف:برمجيات متعددة المنصات
تصنيف:تطوير ألعاب الفيديو
تصنيف:معايير الحاسوب
تصنيف:واجهات برمجة التطبيقات
تصنيف:واقع افتراضي