سورس پرتاب موشک با OpenGL به زبان C++
در این بخش سورس پرتاب موشک با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. سورس کد این پروژه برای یاد گیری چگونگی ساخت بازی های ساده در OpenGL مناسب است و می توانید با مشاهده آن مواردی همچون رسم اشکال مختلف، حرکت دادن شیء ها در جهت های دلخواه را بیاموزید. در ادامه می توانید توضیحات و تصاویر مربوط به این برنامه را مشاهده کنید.
توضیحات پروژه
در این پروژه با استفاده از توابع OpenGL مراحل پرتاب یک موشک به فضا شبیه سازی شده است. زمانی که برنامه اجرا می شود یک موشک از سکویی که آن را کنترل می شود، پرتاب می شود و به سمت بالا می رود و در نهایت از کنار ماه رد می شود و به حرکت خود ادامه دهد.
در زیر برخی از توابع استفاده شده در این پروژه را مشاهده می کنید:
- تابع display1: برای نمایش اشکال مختلف موجود در صفحه استفاده می شود.
- تابع semicircle: برای رسم دایره های موجود در صفحه استفاده می شود.
- تابع static_rocket: برای رسم قسمت های مختلف موشک استفاده می شود.
- تابع stars: برای رسم ستاره های موجود در آسمان استفاده می شود.
- تابع rocket_in_motion: برای شبیه سازی حرکت موشک استفاده می شود.
- تابع myinit: برای آماده سازی قسمت های مختلف برنامه استفاده می شود.
- تابع mars: برای رسم ماه در آسمان استفاده می شود.
قسمت های از سورس پروژه:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | #include <stdlib.h> #include <gl\glut.h> #include <stdio.h> #include <math.h> #include <string.h> const float DEG2RAD = 3.14159 / 180; void display1(); void stars(); int p; void stars1(); void static_rocket(); void rocket_to_cam_pos(); void rocket_in_motion(); void mars(float radius); float i, j, count = 0, count1 = 0, count3 = 0, flag = 0, flag1 = 0, t = 0, f = 0, flag3 = 0; void semicircle(float radius, float u, float v) { glColor3f(1.0, 1.0, 1.0); glBegin(GL_POLYGON); for (int i = 135; i <= 315; i++) { float degInRad = i*DEG2RAD; glVertex2f(u + cos(degInRad)*radius, v + (sin(degInRad))*radius);//100,100 specifies centre of the circle } glEnd(); } void display1() { for (j = 0; j <= 10000000; j++); count1++; if (count1 == 250) flag = 1; if (flag == 0) static_rocket(); else if ((count1 == 151) | (count1 == 152)) rocket_to_cam_pos(); else rocket_in_motion(); } void stars() { glColor3f(1.0, 1.0, 1.0); glPointSize(0.37); glBegin(GL_POINTS); glVertex2i(10, 20); glVertex2i(20, 100); glVertex2i(30, 10); glVertex2i(15, 150); glVertex2i(17, 80); glVertex2i(200, 200); glVertex2i(55, 33); glVertex2i(400, 300); glVertex2i(330, 110); glVertex2i(125, 63); glVertex2i(63, 125); glVertex2i(20, 10); glVertex2i(110, 330); glVertex2i(440, 430); glVertex2i(32, 65); glVertex2i(110, 440); glVertex2i(210, 230); glVertex2i(390, 490); glVertex2i(12, 90); glVertex2i(400, 322); glVertex2i(420, 366); glVertex2i(455, 400); glVertex2i(20, 20); glVertex2i(111, 120); glVertex2i(401, 200); glVertex2i(230, 30); glVertex2i(220, 20); glVertex2i(122, 378); glVertex2i(133, 340); glVertex2i(345, 420); glVertex2i(130, 360); glVertex2i(333, 120); glVertex2i(250, 22); glVertex2i(242, 11); glVertex2i(280, 332); glVertex2i(233, 40); glVertex2i(210, 418); glVertex2i(256, 12); glVertex2i(288, 232); glVertex2i(247, 36); glVertex2i(229, 342); glVertex2i(257, 47); glVertex2i(290, 63); glVertex2i(232, 72); glVertex2i(243, 143); glVertex2i(100, 200); glVertex2i(90, 250); glVertex2i(80, 225); glVertex2i(50, 333); glVertex2i(60, 350); glVertex2i(243, 143); glVertex2i(243, 143); glEnd(); } void mars(float radius) { glBegin(GL_POLYGON); for (int i = 0; i <= 359; i++) { float degInRad = i*DEG2RAD; glVertex2f(300 + f + cos(degInRad)*radius, 500 - t + (sin(degInRad)) *radius);//100,100 specifies centre of the circle } glEnd(); t = t + 0.1; f = f + 0.1; } void myinit() { //int i; glClearColor(0.196078, 0.6, 0.8, 1.0); glPointSize(1.0); gluOrtho2D(0.0, 499.0, 0.0, 499.0); } int main(int argc, char*argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(500, 500); glutCreateWindow("SourceSara.Com | Rocket Launching in OpenGL"); glutIdleFunc(display1); glutDisplayFunc(display1); myinit(); glutMainLoop(); return 0; } |
نکات
- این پروژه در نرم افزار Visual Studio نسخه 2015 تست شده است و به خوبی کار می کند.
- به منظور اجرای پروژه های OpenGL باید آن را بر روی IDE خود نصب کنید (آموزش نصب OpenGL).
- در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.
void display1() { for (j = 0; j <= 10000000; j++); count1++; if (count1 == 250) flag = 1; if (flag == 0) static_rocket(); else if ((count1 == 151) | (count1 == 152)) rocket_to_cam_pos(); else rocket_in_motion(); این قسمت کد رو میشه یه توضیح بدین که مربوط به کدوم بخش پروژه هست؟
لطفا برای این سوال توی انجمن سایت مطرح کنید تا راحت بشه پاسخ داد