سورس شبیه سازی هواپیمای کوچک با OpenGL به زبان C++
در این بخش سورس شبیه سازی هواپیمای کوچک با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. سورس کد این پروژه برای یاد گیری چگونگی ساخت بازی های ساده و کوچک با OpenGL مناسب است و می توانید با مشاهده آن مواردی همچون حرکت دوربین، رسم اشکال مختلف، حرکت دادن شیء ها را بیاموزید. در ادامه می توانید توضیحات و تصاویر مربوط به این برنامه را مشاهده کنید.
توضیحات پروژه
در این پروژه OpenGL، بعد از اجرا شدن برنامه، محیط یک فرودگاه به همراه یک هواپیمای کوچک رسم می شود و کاربر می تواند با استفاده از کلید های مشخص شده، دوربین را در جهت های مختلف به حرکت درآورد و شیء های موجود در صفحه را مشاهده کند.
در زیر برخی از توابع استفاده شده در این پروژه را مشاهده می کنید:
- تابع drawlandinggears: برای ترسیم پایه های مخصوص فرود استفاده می شود.
- تابع drawprop: برای رسم پروانه موجود در نوک هواپیما استفاده می شود.
- تابع drawmiller: برای ترسیم یکی از ساختمان ها استفاده می شود.
- تابع drawnose: برای رسم نوک پروانه هواپیما استفاده می شود.
- تابع drawwings: برای رسم بال های هواپیما استفاده می شود.
- تابع drawtailwings: برای رسم دم هواپیما استفاده می شود.
- تابع drawbody: برای رسم بدنه هواپیما استفاده می شود.
- تابع drawground: برای ترسیم زمینی که هواپیما بر روی آن قرار دارد، استفاده می شود.
برخی از کلید های کنترل کننده برنامه:
- کلید +: برای به حرکت درآوردن هواپیما استفاده می شود.
- کلید -: برای متوقف کردن هواپیما استفاده می شود.
- کلید c: برای رفتن به سمت راست استفاده می شود.
- کلید z: برای رفتن به سمت چپ استفاده می شود.
قسمت های از سورس پروژه:
#ifndef CESSNASKYHAWK_H_SPLASH #define CESSNASKYHAWK_H_SPLASH #include "globals.h" namespace nsCessna { void showtext() // function for showing the splash screen while program is loading { glLoadIdentity(); // load a new identity glClearColor(51.0/255.0,189.0/255.0,255.0/255.0,1.0); // load blud background color glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // clears the buffer bits glColor3f(0.0,0.0,1.0); // sets the color for writing the texts glLoadIdentity(); // loads new identity //sets raster coordinates for where text is to be written rx = -200; ry = -290; for (i = 0; i < 26; i++){ // steps through displaying all the characters glRasterPos2i(rx,ry); // loads the position glColor3f(0.0,0.0 + j/40.0,1.0-j/40.0); // sets the color, changes from blue to green for nice effect glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, spacebar[i]); // displays the character rx+=glutBitmapWidth(GLUT_BITMAP_TIMES_ROMAN_24, spacebar[i])*1.5; // moves the raster position into next place j++; // increments the character } glFlush(); texture(); // calls texture function //draws first polygon with first image texture mapped glPushMatrix(); glEnable(GL_TEXTURE_2D); glTranslatef(300,1,0); glRotatef(180, 0, 0, 1); glBegin(GL_POLYGON); glTexCoord2f(1, 0); glVertex2fv(splash[0]); glTexCoord2f(1, 1); glVertex2fv(splash[1]); glTexCoord2f(0, 1); glVertex2fv(splash[2]); glTexCoord2f(0, 0); glVertex2fv(splash[3]); glEnd(); glPopMatrix(); glDisable(GL_TEXTURE_2D); //image = glmReadPPM("splash1-3.ppm", &iwidth, &iheight); //loads second image texture(); // calls texture function //draws second polygon with first second texture mapped glPushMatrix(); glEnable(GL_TEXTURE_2D); glRotatef(180, 0, 0, 1); glBegin(GL_POLYGON); glTexCoord2f(1, 0); glVertex2fv(splash[0]); glTexCoord2f(1, 1); glVertex2fv(splash[1]); glTexCoord2f(0, 1); glVertex2fv(splash[2]); glTexCoord2f(0, 0); glVertex2fv(splash[3]); glEnd(); glPopMatrix(); glDisable(GL_TEXTURE_2D); //image = glmReadPPM("splash1-2.ppm", &iwidth, &iheight); // loads third image texture(); // calls texture function //draws third polygon with first third texture mapped glPushMatrix(); glEnable(GL_TEXTURE_2D); glTranslatef(299,300,0); glRotatef(180, 0, 0, 1); glBegin(GL_POLYGON); glTexCoord2f(1, 0); glVertex2fv(splash[0]); glTexCoord2f(1, 1); glVertex2fv(splash[1]); glTexCoord2f(1.0/300.0, 1); glVertex2fv(splash[2]); glTexCoord2f(1.0/300.0, 0); glVertex2fv(splash[3]); glEnd(); glPopMatrix(); glDisable(GL_TEXTURE_2D); //image = glmReadPPM("splash1-1.ppm", &iwidth, &iheight); // loads fourth image texture(); // calls texture function //draws fourth polygon with first fourth texture mapped glPushMatrix(); glEnable(GL_TEXTURE_2D); glTranslatef(0,301,0); glRotatef(180, 0, 0, 1); glScalef(301.0/300.0, 301.0/300.0, 0); glBegin(GL_POLYGON); glTexCoord2f(1, 0); glVertex2fv(splash[0]); glTexCoord2f(1, 1); glVertex2fv(splash[1]); glTexCoord2f(0, 1); glVertex2fv(splash[2]); glTexCoord2f(0, 0); glVertex2fv(splash[3]); glEnd(); glPopMatrix(); glDisable(GL_TEXTURE_2D); glFlush(); glutSwapBuffers(); } void splashdisplay(void) { glMatrixMode(GL_PROJECTION); // puts into projection mode glLoadIdentity(); // load new identity glOrtho(-300.0, 300.0, -300.0, 300.0, -1.0, 1.0); // sets orthological projection settings glMatrixMode(GL_MODELVIEW); // back into modelview mode showtext(); // calls the function to show text and image } } #endif CESSNASKYHAWK_H_SPLASH
نکات
- هنگام استفاده از برنامه زبان کیبورد خود را بر روی EN تنظیم کنید.
- این پروژه در نرم افزار Visual Studio نسخه ۲۰۱۵ تست شده است و به خوبی کار می کند.
- به منظور اجرای پروژه های OpenGL باید آن را بر روی IDE خود نصب کنید (آموزش نصب OpenGL).
- در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.
نوشته سورس شبیه سازی هواپیمای کوچک با OpenGL به زبان C++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.