سورس شبیه سازی برخورد هواپیما با ساختمان در OpenGL به زبان C++
در این بخش سورس شبیه سازی برخورد هواپیما با یک ساختمان چند طبقه را در کتابخانه OpenGL برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. سورس کد این پروژه برای یاد گیری چگونگی ساخت بازی های ساده مناسب است و می توانید با مشاهده آن مواردی همچون رسم اشکال مختلف، حرکت دادن شیء ها را بیاموزید. در ادامه می توانید توضیحات و تصاویر مربوط به این برنامه را مشاهده کنید.
توضیحات پروژه
در این پروژه OpenGL، چگونگی برخورد هواپیما با یک ساختمان شبیه سازی شده است. بعد از اجرا شدن برنامه، یک هواپیما از فرودگاه بلند می شود و به سمت راست حرکت می کند. سپس با یک ساختمان چند طبقه ای که جلوی آن قرار دارد برخورد می کند و این موضوع باعث یک انفجار می شود.
در زیر برخی از توابع استفاده شده در این پروژه را مشاهده می کنید:
- تابع update: برای حرکت دادن هواپیما استفاده می شود.
- تابع blast: برای شبیه سازی انفجار هواپیما در هنگام برخورد با ساختمان استفاده می شود.
- تابع build_outline: برای رسم محدوده ساختمان استفاده می شود.
- تابع display: برای نمایش شیء های مختلف استفاده می شود.
- تابع myinit: برای آماده سازی برنامه استفاده می شود.
- تابع building: برای ترسیم ساختمان چند طبقه استفاده می شود.
- تابع road: برای ترسیم باند فرودگاه موجود در صفحه استفاده می شود.
قسمت های از سورس پروژه:
#include <stdio.h> #include <gl\glut.h> GLfloat a = 0, b = 0, c = 0, d = 0, e = 0; void building(); void building1(); void outline(); void blast(); void road(); void display2(); void display3(); void build_outline(); void update(int value) { a += 20.0; //Plane position takeoff on x axis b -= 10.0; //Road Strip backward movement c += 15; //take off at certain angle on y axis if (b <= -78.0)// moving of run way b = 0.0; glutPostRedisplay(); glutTimerFunc(150, update, 0);//delay } void display(void) { glClear(GL_COLOR_BUFFER_BIT); road(); glPushMatrix(); glTranslated(a, c, 0.0); glColor3f(1.0, 1.0, 1.0); glBegin(GL_POLYGON);//rectangular body glVertex2f(0.0, 30.0); glVertex2f(0.0, 55.0); glVertex2f(135.0, 55.0); glVertex2f(135.0, 30.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslated(a, c, 0.0); glColor3f(1.0, 1.0, 1.0); glBegin(GL_POLYGON);//upper triangle construction plane glVertex2f(135.0, 55.0); glVertex2f(150.0, 50.0); glVertex2f(155.0, 45.0); glVertex2f(160.0, 40.0); glVertex2f(135.0, 40.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslated(a, c, 0.0); glColor3f(0.0, 0.0, 0.0); glBegin(GL_LINE_LOOP);//outline of upper triangle plane glVertex2f(135.0, 55.0); glVertex2f(150.0, 50.0); glVertex2f(155.0, 45.0); glVertex2f(160.0, 40.0); glVertex2f(135.0, 40.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslated(a, c, 0.0); glColor3f(1.0, 0.0, 0.0); glBegin(GL_POLYGON);//lower triangle glVertex2f(135.0, 40.0); glVertex2f(160.0, 40.0); glVertex2f(160.0, 37.0); glVertex2f(145.0, 30.0); glVertex2f(135.0, 30.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslated(a, c, 0.0); glColor3f(1.0, 0.0, 0.0); glBegin(GL_POLYGON);//back wing glVertex2f(0.0, 55.0); glVertex2f(0.0, 80.0); glVertex2f(10.0, 80.0); glVertex2f(40.0, 55.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslated(a, c, 0.0); glColor3f(1.0, 0.0, 0.0); glBegin(GL_POLYGON);//left side wing glVertex2f(65.0, 55.0); glVertex2f(50.0, 70.0); glVertex2f(75.0, 70.0); glVertex2f(90.0, 55.0); glEnd(); glPopMatrix(); glPushMatrix(); glTranslated(a, c, 0.0); glColor3f(1.0, 0.0, 0.0); glBegin(GL_POLYGON);//rightside wing glVertex2f(70.0, 40.0); glVertex2f(100.0, 40.0); glVertex2f(80.0, 15.0); glVertex2f(50.0, 15.0); glEnd(); glPopMatrix(); if (c>360) //timer to jump to next display { display2(); d += 20;//plane takeoff on x in 2nd display } if (a>500.0)//window position during take off { a = 0.0; b = 0.0; } if (c>750)//timer to jump to 3rd display { display3(); e += 20;//plane takeoff on x in 3rd display if (e>250)//timer to call blast function { blast(); e = 250; } } glFlush(); glutSwapBuffers(); } int main(int argc, char* argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(500.0, 500.0); glutInitWindowPosition(0, 0); glutCreateWindow("SourceSara.Com | Airplane Crash"); glutDisplayFunc(display); myinit(); glutTimerFunc(100, update, 0); glutMainLoop(); return 0; }
نکات
- این پروژه در نرم افزار ویژوال استودیو نسخه ۲۰۱۵ تست شده است و به خوبی کار می کند.
- به منظور اجرای پروژه های OpenGL باید آن را بر روی IDE خود نصب کنید (آموزش نصب OpenGL).
- در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.
نوشته سورس شبیه سازی برخورد هواپیما با ساختمان در OpenGL به زبان C++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.