سورس شبیه سازی هواپیمای کوچک با OpenGL به زبان C++

airplane simulation in opengl using cpp 5182 تصویر

سورس شبیه سازی هواپیمای کوچک با OpenGL به زبان C++

در این بخش سورس شبیه سازی هواپیمای کوچک با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. سورس کد این پروژه برای یاد گیری چگونگی ساخت بازی های ساده و کوچک با OpenGL مناسب است و می توانید با مشاهده آن مواردی همچون حرکت دوربین، رسم اشکال مختلف، حرکت دادن شیء ها را بیاموزید. در ادامه می توانید توضیحات و تصاویر مربوط به این برنامه را مشاهده کنید.

توضیحات پروژه

در این پروژه OpenGL، بعد از اجرا شدن برنامه، محیط یک فرودگاه به همراه یک هواپیمای کوچک رسم می شود و کاربر می تواند با استفاده از کلید های مشخص شده، دوربین را در جهت های مختلف به حرکت درآورد و شیء های موجود در صفحه را مشاهده کند.

 در زیر برخی از توابع استفاده شده در این پروژه را مشاهده می کنید:

  • تابع drawlandinggears: برای ترسیم پایه های مخصوص فرود استفاده می شود.
  • تابع drawprop: برای رسم پروانه موجود در نوک هواپیما استفاده می شود.
  • تابع drawmiller: برای ترسیم یکی از ساختمان ها استفاده می شود.
  • تابع drawnose: برای رسم نوک پروانه هواپیما استفاده می شود.
  • تابع drawwings: برای رسم بال های هواپیما استفاده می شود.
  • تابع drawtailwings: برای رسم دم هواپیما استفاده می شود.
  • تابع drawbody: برای رسم بدنه هواپیما استفاده می شود.
  • تابع drawground: برای ترسیم زمینی که هواپیما بر روی آن قرار دارد، استفاده می شود.

برخی از کلید های کنترل کننده برنامه:

  • کلید +: برای به حرکت درآوردن هواپیما استفاده می شود.
  • کلید -: برای متوقف کردن هواپیما استفاده می شود.
  • کلید c: برای رفتن به سمت راست استفاده می شود.
  • کلید z: برای رفتن به سمت چپ استفاده می شود.

airplane simulation in opengl using cpp 5182 1 تصویر

قسمت های از سورس پروژه:

#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++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

درباره نویسنده: administrator

ممکن است دوست داشته باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *