Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

‫‪Faculty of Electrical and Electronic‬‬ ‫كلية اهلندسة الكهربائية واإللكرتونية‬

‫‪Engineering‬‬
‫جامعة حلب‬
‫‪University of Aleppo‬‬ ‫قسم هندسة احلواسيب‬
‫‪Computer Engineering Department‬‬

‫‪Fifth Session /5/‬‬ ‫الجلسة الخامسة ‪/ 5 /‬‬


‫‪Fifth year/ Graphical Systems‬‬ ‫السنة الخامسة حاسبات ‪ /‬نظم رسومية‬

‫الجلسة الخامسة‬
‫مق ـدمة‬
‫‪ ‬سنتعلم في هذه الجلسة كيفية استخدام ‪ OpenGL‬للقيام بالوظائف التالية‪:‬‬
‫‪ -‬توضيع وتوجيه اجملسمات يف الفضاء ثالثي األبعاد‪.‬‬
‫‪ -‬مالئمة املوقع لعني الناظر‪.‬‬
‫‪ ‬يجب تذكر أن هدف رسوميات الحاسب يتمثل في خلق صورة ثنائيةة البعةد سجسةام ثةثيةة البعةد بلدةا بعةدين‬
‫فقط سندا سترسم على الشاشة)‪.‬‬
‫‪ ‬مبدأ عمل الكاميرا‬
‫‪ ‬يمكةةن تشةةبي ه عمليةةة التحويةةل فةةي الحاسةةب للحصةةول علةةى المشةةدد المطلةةوب ر يتةةه بعمليةةة التقةةاط صةةورة‬
‫بالكاميرا‪ .‬والخطوات هي‪:‬‬
‫‪ -‬تثبيت حامل الكامريا وتوجيه الكامريا إىل املشهد (حتويالت ‪.)viewing‬‬
‫‪ -‬تنظيم املشهد ووضع عناصره يف املكان املناسب (حتويالت ‪.)modeling‬‬
‫‪ -‬اختيار عدسة الكامريا وتعديل التقريب والتبعيد ‪( zoom‬حتويالت ‪.)projection‬‬
‫‪ -‬حتديد حجم الصورة النهائية (حتويالت ‪.)viewport‬‬
‫‪ ‬بعد تنفيذ هذه الخطوات يمكن التقاط الصورة بواسطة الكاميرا وبشكل مشابه يمكن رسم المشةدد علةى شاشةة‬
‫الحاسب‪.‬‬

‫‪1‬‬ ‫خمرب الربجمة – العام الدراسي ‪2018/2017‬‬


‫‪Faculty of Electrical and Electronic‬‬ ‫كلية اهلندسة الكهربائية واإللكرتونية‬
‫‪Engineering‬‬
‫جامعة حلب‬
‫‪University of Aleppo‬‬ ‫قسم هندسة احلواسيب‬
‫‪Computer Engineering Department‬‬

‫‪Fifth Session /5/‬‬ ‫الجلسة الخامسة ‪/ 5 /‬‬


‫‪Fifth year/ Graphical Systems‬‬ ‫السنة الخامسة حاسبات ‪ /‬نظم رسومية‬

‫‪ ‬هناك ترتيب لدذه العمليات‪ ،‬فتحةويةت ‪ viewing‬يجةب أن تسةبق تحةويةت ‪ modeling‬فةي شةيفرة البرنةام ‪،‬‬
‫أما تحويةت ‪ projection‬و ‪ viewport‬فيمكن تحديدها في أي مكةان ببةل حةدول الرسةم‪ .‬يبةين الشةكل التةالي‬
‫الترتيب الذي تنفذ فيه هذه العمليات على الحاسب‪.‬‬

‫‪ ‬لتحقيق تحويةت ‪ projection‬و‪ modeling‬و‪ viewing‬سنبني مصفوفة ‪ M‬أبعادها ‪ 4x4‬يتم ضربدا بإحداثيات‬
‫كل رأس ‪ V‬في المشدد لتحقيق التحويل المطلوب‪.‬‬
‫‪V` = MV‬‬

‫مث ـال‪:‬‬
‫‪ ‬يرسم هذا المثال مكعبا يتم تحجيمهبتكبيره إلى الضعف وفق المحور ‪ ) y‬ونقله مسافة بسيطة عكةس المحةور‬
‫‪ Z‬عن طريق تحويل ‪ .modeling‬كذلك يتم تحديد تحويل إسقاط وتحويل ‪.viewport‬‬

‫>‪#include<GL/glut.h‬‬
‫>‪#include <stdlib.h‬‬
‫>‪#include<math.h‬‬

‫;)‪static void redraw(void‬‬


‫;)‪int main(int argc, char **argv‬‬
‫)‪int main(int argc, char **argv‬‬
‫{‬
‫;‪int h=300,w=300‬‬
‫;)‪glutInit(&argc,argv‬‬
‫;)‪glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH‬‬
‫;)‪glutInitWindowPosition(100,100‬‬
‫;)‪glutInitWindowSize(400,400‬‬
‫;)"‪glutCreateWindow("draw Wire Cube‬‬
‫;)‪glutDisplayFunc(redraw‬‬

‫‪2‬‬ ‫خمرب الربجمة – العام الدراسي ‪2018/2017‬‬


Faculty of Electrical and Electronic ‫كلية اهلندسة الكهربائية واإللكرتونية‬
Engineering
‫جامعة حلب‬
University of Aleppo ‫قسم هندسة احلواسيب‬
Computer Engineering Department

Fifth Session /5/ / 5 / ‫الجلسة الخامسة‬


Fifth year/ Graphical Systems ‫ نظم رسومية‬/ ‫السنة الخامسة حاسبات‬

glMatrixMode(GL_PROJECTION);/* projection ‫* تعريف حتويل االسقاط‬/


gluPerspective(45,1.0,10.0,200.0);
glMatrixMode(GL_MODELVIEW);
glViewport (0, 0, w, h); /* viewport ‫* تعريف حتويل‬/
glutMainLoop();
return 0;
}
static void redraw(void)
{
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f (1.0, 1.0, 1.0);
glLoadIdentity ();
glTranslatef (0.0, 0.0, -100.0);
glScalef (1.0, 2.0, 1.0); /* modeling ‫* حتويل‬/
glutWireCube(25.0); /* ‫* رسم مكعب سلكي‬/
glutSwapBuffers();
}
modeling‫ و‬viewing ‫تحويالت‬
‫ ببةل‬GL_MODELVIEW ‫ مة المعامةل‬glMatrixMode() ‫ ببل البدء بالتفاصيل تةذكر أنةه يجةب اسةتدعاء اسمةر‬
. modeling ‫ أو‬viewing ‫تنفيذ تحويةت‬
: ‫التفكير بالتحويالت‬
:‫ ترتيب التحويةت ضروري جدا‬

‫ آخةةر تحويةةل يسةةتدعى فةةي برنامجةةك هةةو فعليةةا أول‬.4x4 ‫ تمثةةل بمصةةفوفة‬modeling ‫ و‬viewing ‫ تحةةويةت‬
.‫تحويل يطبق على الر وس‬
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMultMatrixf(N); /* apply transformation N */
glMultMatrixf(M); /* apply transformation M */
glMultMatrixf(L); /* apply transformation L */
glBegin(GL_POINTS);
glVertex3f(v); /* draw transformed vertex v */
glEnd();

3 2018/2017 ‫خمرب الربجمة – العام الدراسي‬


‫‪Faculty of Electrical and Electronic‬‬ ‫كلية اهلندسة الكهربائية واإللكرتونية‬
‫‪Engineering‬‬
‫جامعة حلب‬
‫‪University of Aleppo‬‬ ‫قسم هندسة احلواسيب‬
‫‪Computer Engineering Department‬‬

‫‪Fifth Session /5/‬‬ ‫الجلسة الخامسة ‪/ 5 /‬‬


‫‪Fifth year/ Graphical Systems‬‬ ‫السنة الخامسة حاسبات ‪ /‬نظم رسومية‬

‫‪ ‬النات ))‪.N(M(LV‬‬
‫‪ ‬لنكتب الشيفرة البرمجية للشكل السابق على افتراض أن الدوران يتم أوال ثم التحريك‪:‬‬
‫;)‪glMatrixMode(GL_MODELVIEW‬‬
‫;)(‪glLoadIdentity‬‬
‫;)‪glMultMatrixf(T‬‬ ‫‪/* translation */‬‬
‫;)‪glMultMatrixf(R‬‬ ‫‪/* rotation */‬‬
‫;)(‪draw_the_object‬‬
‫تصدر أوامر التحويل ‪ viewing‬أوال ثم ‪modeling‬‬ ‫‪‬‬

‫تحويالت ‪modeling‬‬
‫‪ ‬هناك ثةثة تحويةت ‪ modeling‬وهي )(*‪.glScale*() ،glRotate*() ،glTranslate‬‬
‫‪ ‬هةةةةذه التحةةةةويةت الثةثةةةةة مكافئةةةةة لتشةةةةكيل مصةةةةفوفة النقةةةةل‪ ،‬والةةةةدوران‪ ،‬وتغييةةةةر الحجةةةةم ثةةةةم اسةةةةتدعاء‬
‫)(*‪ glMultMatrix‬م المصفوفة المةئمة كوسيط‪.‬‬
‫‪ ‬تحويل النقل ‪Translate‬‬
‫;)‪void glTranslate{fd}(TYPEx, TYPE y, TYPEz‬‬
‫تضرب المصفوفة الحالية بمصفوفة تنقل الجسم بمقدار بيم ‪ x,y,z‬كما هو مبين في الشكل التالي‪:‬‬ ‫‪‬‬

‫‪ ‬مصفوفة النقل الناتجة ‪ T‬وهي ‪:‬‬

‫‪ ‬تحويل الدوران ‪Rotate‬‬


‫;)‪void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z‬‬

‫‪ ‬يضرب المصفوفة الحالية بمصفوفة تدور الجسم بعكس عقارب الساعةب‪ )+‬أو م عقارب الساعة ب‪ )-‬حةول‬
‫محور معين وبزاوية تقدر بالدرجات‪.‬‬
‫‪ ‬تبين اسشكال التالية الدوران الموجب والسالب للمحاور الثةثة‪.‬‬

‫‪4‬‬ ‫خمرب الربجمة – العام الدراسي ‪2018/2017‬‬


‫‪Faculty of Electrical and Electronic‬‬ ‫كلية اهلندسة الكهربائية واإللكرتونية‬
‫‪Engineering‬‬
‫جامعة حلب‬
‫‪University of Aleppo‬‬ ‫قسم هندسة احلواسيب‬
‫‪Computer Engineering Department‬‬

‫‪Fifth Session /5/‬‬ ‫الجلسة الخامسة ‪/ 5 /‬‬


‫‪Fifth year/ Graphical Systems‬‬ ‫السنة الخامسة حاسبات ‪ /‬نظم رسومية‬

‫‪ ‬يبين الشكل التالي تأثير اسمر )‪:glRotate(45.0,0.0,0.0,1.0‬‬

‫‪ ‬مصفوفة الدوران الناتجة ‪: R‬‬

‫‪ ‬تحويل تغيير الحجم ‪Scale‬‬


‫;)‪void glScale{fd}(TYPEx, TYPE y, TYPEz‬‬
‫‪ ‬يضرب المصةفوفة الحاليةة بمصةفوفة تكبةر أو تمةدد أو تقلةع أو تعكةس الجسةم عبةر المحةاور‪ .‬يضةرب كةل‬

‫‪5‬‬ ‫خمرب الربجمة – العام الدراسي ‪2018/2017‬‬


‫‪Faculty of Electrical and Electronic‬‬ ‫كلية اهلندسة الكهربائية واإللكرتونية‬
‫‪Engineering‬‬
‫جامعة حلب‬
‫‪University of Aleppo‬‬ ‫قسم هندسة احلواسيب‬
‫‪Computer Engineering Department‬‬

‫‪Fifth Session /5/‬‬ ‫الجلسة الخامسة ‪/ 5 /‬‬


‫‪Fifth year/ Graphical Systems‬‬ ‫السنة الخامسة حاسبات ‪ /‬نظم رسومية‬

‫إحةةداثي ‪ x,y,z‬لكةةل نقطةةة بالمعامةةل الموافةةق ‪ . x,y,z‬والجسةةم المةةرتبط يتمةةدد معدةةا‪ .‬يظدةةر الشةةكل التةةالي تةةأثير‬
‫التحويل )‪glScalef (2.0,-0.5,1.0‬‬

‫‪ ‬مصفوفة تغيير الحجم الناتجة ‪: S‬‬

‫‪ ‬القيم أكبر من ‪ 1‬تكبير وأصغر من ‪ 1‬تصغير‪ .‬القيم ‪ -1‬تعني عكس الجسم على المحور‪.‬‬

‫تحويالت ‪viewing‬‬
‫‪ ‬تسةةتخدم لتغييةةر موبة ووجدةةة نظةةر المشةةدد بالكةةاميرا) ‪ .‬يشةةبه ذلةةك وض ة أرجةةل الكةةاميرا وتوجيددةةا باتجةةاه‬
‫الجسم‪ .‬تتألف عادة تحويةت ‪ viewing‬من نقل ودوران‪.‬‬
‫‪ ‬يكافئ تحويل ‪ modeling‬الذي يةدور جسةم عكةس عقةارب السةاعة تحويةل ‪ viewing‬الةذي يةدور الكةاميرا مة‬
‫عقارب الساعة‪.‬‬

‫‪ ‬استخدام )(*‪ glTranslate‬و )(*‪glRotate‬‬


‫‪ ‬توجه الكاميرا عادة نحو المحور ‪ z‬السالب‪ .‬بنرى ظدر الكاميرا)‬

‫‪6‬‬ ‫خمرب الربجمة – العام الدراسي ‪2018/2017‬‬


‫‪Faculty of Electrical and Electronic‬‬ ‫كلية اهلندسة الكهربائية واإللكرتونية‬
‫‪Engineering‬‬
‫جامعة حلب‬
‫‪University of Aleppo‬‬ ‫قسم هندسة احلواسيب‬
‫‪Computer Engineering Department‬‬

‫‪Fifth Session /5/‬‬ ‫الجلسة الخامسة ‪/ 5 /‬‬


‫‪Fifth year/ Graphical Systems‬‬ ‫السنة الخامسة حاسبات ‪ /‬نظم رسومية‬

‫‪ ‬تستطي تحريك الكاميرا بعيدا عن اسجسام إلى الوراء وهذا له نفس تأثير تحريك اسجسام بعيدا عن الكاميرا‬
‫لألمام‪ .‬اسمر المستخدم )‪glTranslatef(0.0,0.0,-5.0‬‬

‫‪ ‬إذا أردنةا ر يةة العناصةر مةن الجانةب يجةب تةدوير الجسةم ثةم تحريكةه بعيةدا عةن الكةاميرا حتةى يمكةن ر يةة‬
‫الجانب المطلوب من العنصر بتكتب اسوامر بعكس الترتيب التحريك ثم الدوران)‬
‫)‪glTranslatef(0.0,0.0,-5.0‬‬ ‫(مجلة االحداثيات احمللية)‬
‫;)‪glRotate(90.0,0.0,1.0,0.0‬‬

‫‪ ‬التابع المسؤول عن الكاميرا‪:‬‬


‫; ) ‪gluLookAt(eyex,eyey,eyez,atx,aty,atz,upx, upy, upz‬‬

‫‪ ‬مثال‪:‬‬
‫;) ‪gluLookAt( 0.0, 0.0, 50.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0‬‬
‫;) ‪gluLookAt( 0.0, 0.0, -50.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0‬‬

‫‪7‬‬ ‫خمرب الربجمة – العام الدراسي ‪2018/2017‬‬


Faculty of Electrical and Electronic ‫كلية اهلندسة الكهربائية واإللكرتونية‬
Engineering
‫جامعة حلب‬
University of Aleppo ‫قسم هندسة احلواسيب‬
Computer Engineering Department

Fifth Session /5/ / 5 / ‫الجلسة الخامسة‬


Fifth year/ Graphical Systems ‫ نظم رسومية‬/ ‫السنة الخامسة حاسبات‬

‫القسم العملي‬
:)‫ (هرم ومكعب‬3D ‫ إلى‬2D ‫ تحويل المربع والمثلث من‬:1 ‫تطبيق‬

#include<GL/glut.h>
#include <stdlib.h>
#include<math.h>

static void redraw(void);


int main(int argc, char **argv)
{ glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
glutCreateWindow("draw payamid & cube");
glutDisplayFunc(redraw);
glMatrixMode(GL_PROJECTION);
gluPerspective(45,1.0,10.0,200.0);
glMatrixMode(GL_MODELVIEW);
glutMainLoop();
return 0;
}
static void redraw(void)
{ glClearColor(1.0,1.0,1.0,0.0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glTranslatef(-15.0f,0.0f,-100.0f);
glRotatef(30,0.0f,1.0f,0.0f); // y ‫درجة حول احملور‬30 ‫تدوير اهلرم‬
glBegin(GL_TRIANGLES); // ‫بدء رسم املثلث‬
glColor3f(1.0f,0.0f,0.0f); // ‫أمحر‬
glVertex3f( 0.0f, 10.0f, 0.0f); // ‫الواجهة األمامية للهرم‬- ‫النقطة العلوية يف املثلث‬
glColor3f(0.0f,10.0f,0.0f); // ‫أخضر‬
glVertex3f(-10.0f,-10.0f, 10.0f); // ‫الواجهة األمامية للهرم‬- ‫النقطة اليسارية يف املثلث‬
glColor3f(0.0f,0.0f,10.0f); // ‫أزرق‬
glVertex3f( 10.0f,-10.0f, 10.0f); // ‫الواجهة األمامية للهرم‬- ‫النقطة اليمينية يف املثلث‬
glColor3f(10.0f,0.0f,0.0f); // ‫أمحر‬
glVertex3f( 0.0f, 10.0f, 0.0f); // ‫الواجهة اليمينية للهرم‬- ‫النقطة العلوية يف املثلث‬
glColor3f(0.0f,0.0f,1.0f); // ‫أزرق‬
glVertex3f( 10.0f,-10.0f, 10.0f); // ‫الواجهة اليمينية للهرم‬- ‫النقطة اليسارية يف املثلث‬
glColor3f(0.0f,10.0f,0.0f); // ‫أخضر‬
glVertex3f( 10.0f,-10.0f, -10.0f); // ‫الواجهة اليمينية للهرم‬- ‫النقطة اليمينية يف املثلث‬
glColor3f(1.0f,0.0f,0.0f); // ‫أمحر‬
glVertex3f( 0.0f, 10.0f, 0.0f); // ‫الواجهة اخللفية للهرم‬- ‫النقطة العلوية يف املثلث‬
glColor3f(0.0f,1.0f,0.0f); // ‫أخضر‬
glVertex3f( 10.0f,-10.0f, -10.0f); // ‫الواجهة اخللفية للهرم‬- ‫النقطة اليسارية يف املثلث‬
glColor3f(0.0f,0.0f,1.0f); // ‫أزرق‬

8 2018/2017 ‫خمرب الربجمة – العام الدراسي‬


‫‪Faculty of Electrical and Electronic‬‬ ‫كلية اهلندسة الكهربائية واإللكرتونية‬
‫‪Engineering‬‬
‫جامعة حلب‬
‫‪University of Aleppo‬‬ ‫قسم هندسة احلواسيب‬
‫‪Computer Engineering Department‬‬

‫‪Fifth Session /5/‬‬ ‫الجلسة الخامسة ‪/ 5 /‬‬


‫‪Fifth year/ Graphical Systems‬‬ ‫السنة الخامسة حاسبات ‪ /‬نظم رسومية‬

‫;)‪glVertex3f(-10.0f,-10.0f, -10.0f‬‬ ‫النقطة اليمينية يف املثلث ‪-‬الواجهة اخللفية للهرم ‪//‬‬


‫;)‪glColor3f(1.0f,0.0f,0.0f‬‬ ‫أمحر ‪//‬‬
‫;)‪glVertex3f( 0.0f, 10.0f, 0.0f‬‬ ‫النقطة العلوية يف املثلث ‪-‬الواجهة اليسارية للهرم ‪//‬‬
‫;)‪glColor3f(0.0f,0.0f,1.0f‬‬ ‫أزرق ‪//‬‬
‫;)‪glVertex3f(-10.0f,-10.0f,-10.0f‬‬ ‫النقطة اليسارية يف املثلث ‪-‬الواجهة اليسارية للهرم ‪//‬‬
‫;)‪glColor3f(0.0f,1.0f,0.0f‬‬ ‫أخضر ‪//‬‬
‫;)‪glVertex3f(-10.0f,-10.0f, 10.0f‬‬ ‫النقطة اليمينية يف املثلث ‪-‬الواجهة اليسارية للهرم ‪//‬‬
‫;)(‪glEnd‬‬ ‫هناية رسم اهلرم ‪//‬‬
‫;)(‪glLoadIdentity‬‬ ‫اعادة هتيئة مصفوفة التحويالت ‪//‬‬
‫;)‪glTranslatef(20.0f,0.0f,-100.0f‬‬
‫;)‪glRotatef(30,1.0f,1.0f,0.0f‬‬
‫;)‪glBegin(GL_QUADS‬‬ ‫رسم املكعب ‪//‬‬
‫;)‪glColor3f(0.0f,1.0f,0.0f‬‬ ‫أخضر ‪//‬‬
‫;)‪glVertex3f( 10.0f, 10.0f,-10.0f‬‬ ‫النقطة العلوية اليمينية يف املربع‪-‬الواجهة العلوية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f, 10.0f,-10.0f‬‬ ‫النقطة العلوية اليسارية يف املربع‪-‬الواجهة العلوية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f, 10.0f, 10.0f‬‬ ‫النقطة السفلية اليسارية يف املربع‪-‬الواجهة العلوية للمكعب ‪//‬‬
‫;)‪glVertex3f( 10.0f, 10.0f, 10.0f‬‬ ‫النقطة السفلية اليمينية يف املربع‪-‬الواجهة العلوية للمكعب ‪//‬‬
‫;)‪glColor3f(1.0f,0.5f,0.0f‬‬ ‫برتقايل ‪//‬‬
‫;)‪glVertex3f( 10.0f,-10.0f, 10.0f‬‬ ‫النقطة العلوية اليمينية يف املربع‪-‬الواجهة السفلية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f,-10.0f, 10.0f‬‬ ‫النقطة العلوية اليسارية يف املربع‪-‬الواجهة السفلية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f,-10.0f,-10.0f‬‬ ‫النقطة السفلية اليسارية يف املربع‪-‬الواجهة السفلية للمكعب ‪//‬‬
‫;)‪glVertex3f( 10.0f,-10.0f,-10.0f‬‬ ‫النقطة السفلية اليمينية يف املربع‪-‬الواجهة السفلية للمكعب ‪//‬‬
‫;)‪glColor3f(1.0f,0.0f,0.0f‬‬ ‫أمحر ‪//‬‬
‫;)‪glVertex3f( 10.0f, 10.0f, 10.0f‬‬ ‫النقطة العلوية اليمينية يف املربع‪-‬الواجهة األمامية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f, 10.0f, 10.0f‬‬ ‫النقطة العلوية اليسارية يف املربع‪-‬الواجهة األمامية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f,-10.0f, 10.0f‬‬ ‫النقطة السفلية اليسارية يف املربع‪-‬الواجهة األمامية للمكعب ‪//‬‬
‫;)‪glVertex3f( 10.0f,-10.0f, 10.0f‬‬ ‫النقطة السفلية اليمينية يف املربع‪-‬الواجهة األمامية للمكعب ‪//‬‬
‫;)‪glColor3f(1.0f,1.0f,0.0f‬‬ ‫أصفر ‪//‬‬
‫;)‪glVertex3f( 10.0f,-10.0f,-10.0f‬‬ ‫النقطة العلوية اليمينية يف املربع‪-‬الواجهة اخللفية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f,-10.0f,-10.0f‬‬ ‫النقطة العلوية اليسارية يف املربع‪-‬الواجهة اخللفية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f, 10.0f,-10.0f‬‬ ‫النقطة السفلية اليسارية يف املربع‪-‬الواجهة اخللفية للمكعب ‪//‬‬
‫;)‪glVertex3f( 10.0f, 10.0f,-10.0f‬‬ ‫النقطة السفلية اليمينية يف املربع‪-‬الواجهة اخللفية للمكعب ‪//‬‬
‫;)‪glColor3f(0.0f,0.0f,1.0f‬‬ ‫أزرق ‪//‬‬
‫;)‪glVertex3f(-10.0f, 10.0f, 10.0f‬‬ ‫النقطة العلوية اليمينية يف املربع‪-‬الواجهة اليسارية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f, 10.0f,-10.0f‬‬ ‫النقطة العلوية اليسارية يف املربع‪-‬الواجهة اليسارية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f,-10.0f,-10.0f‬‬ ‫النقطة السفلية اليسارية يف املربع‪-‬الواجهة اليسارية للمكعب ‪//‬‬
‫;)‪glVertex3f(-10.0f,-10.0f, 10.0f‬‬ ‫النقطة السفلية اليمينية يف املربع‪-‬الواجهة اليسارية للمكعب ‪//‬‬
‫;)‪glColor3f(1.0f,0.0f,1.0f‬‬ ‫بنفسجي ‪//‬‬
‫;)‪glVertex3f( 10.0f, 10.0f,-10.0f‬‬ ‫النقطة العلوية اليمينية يف املربع‪-‬الواجهة اليمينية للمكعب ‪//‬‬
‫;)‪glVertex3f( 10.0f, 10.0f, 10.0f‬‬ ‫النقطة العلوية اليسارية يف املربع‪-‬الواجهة اليمينية للمكعب ‪//‬‬
‫;)‪glVertex3f( 10.0f,-10.0f, 10.0f‬‬ ‫النقطة السفلية اليسارية يف املربع‪-‬الواجهة اليمينية للمكعب ‪//‬‬
‫;)‪glVertex3f( 10.0f,-10.0f,-10.0f‬‬ ‫النقطة السفلية اليمينية يف املربع‪-‬الواجهة اليمينية للمكعب ‪//‬‬

‫‪9‬‬ ‫خمرب الربجمة – العام الدراسي ‪2018/2017‬‬


Faculty of Electrical and Electronic ‫كلية اهلندسة الكهربائية واإللكرتونية‬
Engineering
‫جامعة حلب‬
University of Aleppo ‫قسم هندسة احلواسيب‬
Computer Engineering Department

Fifth Session /5/ / 5 / ‫الجلسة الخامسة‬


Fifth year/ Graphical Systems ‫ نظم رسومية‬/ ‫السنة الخامسة حاسبات‬

glEnd(); // ‫هناية رسم املكعب‬


glutSwapBuffers();
}
.‫ يطلب الحصول على أشكال صحيحة ثةثية البعد‬:1‫تعديل‬ 
.‫ يطلب إضافة باعدة للدرم‬:2‫تعديل‬ 
.‫ يطلب ر ية المكعب والدرم من زوايا ر ية بكاميرا) مختلفة‬:3‫تعديل‬ 

:‫ لرسم املثلثات التالية‬modeling ‫ استخدام حتويالت‬:2 ‫تطبيق‬

static void redraw(void)


{
float x1,x2,x3,y1,y2,y3;
#define draw_triangle(x1,y1,x2,y2,x3,y3) glBegin(GL_LINE_LOOP);\
glVertex2f(x1,y1);glVertex2f(x2,y2);glVertex2f(x3,y3);glEnd();
glClearColor(1,1,1,0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.0);
glEnable(GL_LINE_STIPPLE);
//‫رسم املثلث اليساري السفلي‬
glLineStipple(1, 0xFFFF);
glLoadIdentity ();
glTranslatef (-15.0, 0.0, -70.0);
draw_triangle(-5.0,-10.0,-10.0,-20.0,0.0,-20.0);
//‫رسم املثلث اليميين السفلي‬
glLineStipple(1, 0xF0F0);
glLoadIdentity();
glTranslatef(10.0, 0.0, -70.0);
draw_triangle(5.0,-10.0,0.0,-20.0,10.0,-20.0);
//‫رسم املثلث اليساري العلوي‬
glLineStipple(1, 0xF00F);
glLoadIdentity();
glTranslatef(-10.0, 0.0, -70.0);
glScalef(1.5, 0.5, 1.0);
draw_triangle(-5.,10.0,-10.0,0.0,0.0,0.0);
//‫رسم املثلث اليميين العلوي‬
glLineStipple(1, 0x8888);
glLoadIdentity();
glTranslatef(20.0, 0.0, -70.0);
glRotatef (90.0, 0.0, 0.0, 1.0);
draw_triangle (10.0,20.0,0.0,10.0,20.0,10.0);
glDisable (GL_LINE_STIPPLE);
glutSwapBuffers();
}
:‫تعديل‬
‫ عدل ما يلزم لرسم األشكال‬،‫ مرة واحدة فقط في البرنامج السابق‬glLoadIdentity ‫إذا علمت أنه يجب استخدام تعليمة‬
.‫الموضحة أعاله‬

10 2018/2017 ‫خمرب الربجمة – العام الدراسي‬

You might also like