OpenGL .. الدرس رقم 1

Spread the love
 OpenGL .. الدرس رقم 1  أضيف في: 9-6-1427هـ
تعريب بالدررس

درسنا الثاني .. مربع + مثلث على الشاشة .. ربما يقول البعض فقط مربع ومثلث ؟ ماذا سنستفيد من هذا الدرس ؟ اليكم الجواب .. جميع ماسنقوم بانشائه مع OpenGL يحتوي على مربعات ومثلثات بالاضافة إلى اننا سنتعلم في هذا الدرس كيفية انشاء كل من المربع والمثلث فاننا سوف نتعلم ايضا كيفية وضعهما على الشاشة في المكان والبعد والعمق الذي نريده اي بامكاننا بعد هذا الدرس ان شاء الله ان نقوم بتوزيع الكائنات على الشاشة بدون اي مشاكل .

الدرس ..

ماسنقوم بشرحه الآن هو ماقمنا بإضافته الى الكود الأصلي (المشروح في الدرس الأول) .. وللذي لم يقرأ الدرس الأول فالكود الذي اتحدث عنه والموجود في الدرس الأول هو أساس كل برنامج OpenGL ويجب ان يكون موجودا في كل برنامج OpenGL .

الملف المرفق مع الدرس الحالي يحتوي على الكود كاملا ( أي كود الدرس الأول والكود المضاف في هذا الدرس )

السطور التالية سوف تضاف بعدDrawGLScene(GLvoid)
سوف أقوم بووضع الكود أولا ومن ثم شرحه

CODE
int DrawGLScene(GLvoid)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

هذا الكود موجود في الدرس السابق ، بعده مباشرة نبدا باضافة مانريد كتابته بعد الآن .. قمت باعاده كتابه هذا الكود من أجل glLoadIdentity();
عند الوصول إلى glLoadIdentity(); فإن ماسيحدث هو الرجوع إلى منتصف الشاشة
لدينا الآن ثلاث محاور X , Y , Z المحور X يتحرك من اليسار إلى اليمين على الشاشة .. المحور Y يتحرك للأعلى والأسفل على الشاشة .. المحور Z يعبر عن العمق تخيل بانه لديك عصا وعلى افتراض بانك تستطيع ادخالها بداخل الشاشة واخراجها في خط مستقيم فهذا هو المحور Z اي الدخول والخروج الى عمق الشاشة .. بالطبع يستطيع فهم هذه المحاور من درس الفيزياء وعرف قاعدة فليمنغ لليد اليمنى ومن لايعرفها (مثلي) فليقرأ التفصيل القادم ::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::2

لنفرض منتصف شاشة الكمبيوتر التي أمامك هي النقطه صفر فإن أي خط مستقيم لديك يتجه من اليسار لليمن من عند النقطه صفر هو المحور X يكون موجبا .. وأي خط مستقيم يتجه من اليمين لليسار من عند النقطة صفر هو المحور X أيضا ولكنه هذي المرة بالسالب .
أيضا عند النقطة صفر (والتي هي منتصف الشاشة) عندما يتحرك خط مستقيم من الأسفل إلى الأعلى فهذا هو المحور Y ويكون موجبا .. وأي خط مستقيم يتحرك من الأعلى الى الاسفل من عند النقطة صفر فهو المحور Y ولكنه سالبا .
اذا افترضنا وجود خط مستقيم من خارج الشاشة إلى داخلها عند النقطة صفر يكون هذا الخط هو المحور Z ويكون سالبا بينما اذا كان الخط المستقيم من داخل الشاشة الى خارجها يكون المحور Z موجبا .
(اعتقد ان قراءة ماسبق مرة واحدة لاتكفي) ولكم القرار ::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::3

لنقوم الآن بشرح الاضافات الجديدة على الكود

CODE
glTranslatef(-1.5f,0.0f,-6.0f);

glTranslatef يقوم باختيار الموضع الذي سنقوم بالبدء منه (نحن الآن في منتصف الشاشة وسوف نقوم بالتحرك الى اليسار قليلا لنرسم المثلث حتى يتبقى النصف الايمن من الشاشة لرسم المربع) .
البارامترات الثلاثة بعد glTranslatef هي ترتيبا X الاولى Y الثانية Z الثالثة
في السطر السابق يتحرك المحور اكس باتجاه اليسار (تذكر انك الان في منتصف الشاشة ولذلك تحركك الى اليسار يعتبر قيمة سالبة)
بمقدار 1.5 .. المحور Y يساوي صفر اي اننا لن قوم بالتحرك للأعلى والأسفل انما فقط نتحرك باتجاه اليسار .. المحور Z يساوي 6 بالسالب اي اننا سوف نضع الكائن الذي سنرسمه في عمق مقداره 6 الى داخل الشاشة ( العمق لايظهر جليا الان كوننا لم نقم بالرسم ثلاثي الابعاد) .

CODE
glBegin(GL_TRIANGLES);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glEnd();

الآن وبعد ان قمنا بالتحرك الى القسم الأيسر من الشاشة بإمكاننا إنشاء المثلث
glBegin(GL_TRIANGLES) يعني بأننا نريد البدء برسم مثلث
glEnd() يخبر OpenGL باننا انتهينا من رسم المثلث
اذا أردنا وضع 3 نقط على الشاشة كالمثلث مثلا نستخدم GL_TRIANGLES بينما اذا أردنا 4 نقط لانشاء مربع نقوم باستخدام GL_QUADS واذا اردنا استخدام اكثر من 4 نقط فنستخدم GL_POLYGON (معظم كروت الشاشة حاليا تقوم بتصيير render المجسمات كمثلثات )
السطر الأول بعد glBegin(GL_TRIANGLES) يضع النقطة الاولى من المثلث الذي يتكون بطبيعة الحال من ثلاث نقاط
البارامتر الأول للمحور X والبارامتر الثاني للمحور Y والبارامتر الثالث للمحور Z .. مثلما نرى البارامتر الأول يساوي صفر والبارامتر الثاني يساوي 1 والبارامتر الثالث يساوي صفر أي اننا سوف نتحرك فقط إلى الأعلى وبذلك تكون تلك النقطه هي النقطه العليا للمثلث
السطر الثاني بعد glBegin(GL_TRIANGLES) يبين بان المحور X يساوي 1 بالسالب اي اننا اتجهنا الى اليسار بمقدار 1 والبارامتر Y يساوي 1 بالسالب اي اننا اتجهنا لأسفل بمقدار 1 ( مع العلم باننا نتحرك الان من منتصف النصف الأيسر للشاشة وليس من النقطه العليا للمثلث) والبارامتر الثالث يساوي صفر اي اننا لم نتحرك في العمق (العمق لن نحتاجه الا عند العمل على الرسم ثلاثي الابعاد) وبذلك تتكون لدينا النقطه الثانية للمثلث والتي تكون في الجزء الأيسر السفلي من المثلث
السطر الثالث بعد glBegin(GL_TRIANGLES) يبين البارامتر الاول يساوي 1 بالموجب اي انه يتحرك إلى اليمين بمقدار 1 والبارامتر الثاني Y يساوي 1 بالسالب اي انه يتحرك للأسفل بمقدار 1 ( ونذكر بان هذا التحرك من منصف الجزء الأيسر من الشاشة وليس من النقطه العليا للمثلث او النقطه التي في الجزء الايسر السفلي من المثلث ) والبارامتر الثالث يساوي صفر .. وبذلك تتكون النقطه الثالثه من المستطيل وهي في الجزء السفلي الايمن من المثلث .

CODE
glTranslatef(3.0f,0.0f,0.0f);

الآن نقوم بالتحرك الى اليمين لرسم المربع .. وسوف نتحرك بمقدار 3 نقاط .. اولا نتحرك 1.5 الى اليمين لنرجع الى منتصف الشاشة ومن ثم نتحرك 1.5 اخرى للذهاب الى الجزء الايمن من وبذلك يكون مجموع ماتحركناه 3 موجب .. والموجب لاننا نتحرك باتجاه الايمن للمحور X

CODE
glBegin(GL_QUADS);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f( 1.0f, 1.0f, 0.0f);
glVertex3f( 1.0f,-1.0f, 0.0f);
glVertex3f(-1.0f,-1.0f, 0.0f);
glEnd();
return TRUE;
}

في الكود السابق نقوم بانشاء المربع باستخدام GL_QUADSنظرا لاحتواءه على 4 نقط
مثل طريقه توزيع نقاط المثلث نقوم بالتوزيع هنا
الكود الأول بعد GL_QUADS للنقطة العليا اليسرى
الكود الثاني للنقطة اليمنى العليا
الثالث للنقطة اليمنى السفلى والكود الرابع للنقطة السفلى اليسرى

CODE
if (keys[VK_F1])
{
keys[VK_F1]=FALSE;
KillGLWindow();
fullscreen=!fullscreen;
if (!CreateGLWindow(“NeHe’s First Polygon Tutorial”,640,480,16,fullscreen))
{
return 0;
}
}

الكود السابق موجود في الدرس الأول وتم تغيير الرسالة التي ستظهر في العنوان title فقط

إلى هنا انتهى الدرس الثاني .. قصير .. سهل .. بسيط ولكن يحتاج قليلا من التركيز
هذا الدرس مهم جدا ويجب( معرفته وفهمه) جيدا بعكس الدرس الاول والذي لاتحتاج الى التعمق فيه بل يكفيك معرفة مايدرو هناك فقط

الكود المصدري للدرس

http://nehe.gamedev.net/data/lessons/vc/lesson02.zip

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

الكاتب: AlDeaj

الكاتب geek4arab

geek4arab

مواضيع متعلقة

التعليقات مغلقة