سورس ایستگاه اتوبوس با OpenGL به زبان C++
در این بخش سورس ایستگاه اتوبوس با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. با مشاهده سورس کد این پروژه می توانید مواردی همچون حرکت دوربین، رسم اشکال مختلف، حرکت دادن شیء ها و همچنین تکنیک هایی که در ساخت بازی های ساده در OpenGL استفاده می شوند را بیاموزید. در ادامه می توانید توضیحات و تصاویر مربوط به این برنامه را مشاهده کنید.
توضیحات پروژه
در این پروژه OpenGL، بعد از اجرا شدن برنامه، یک اتوبوس در خیابان حرکت می کند و در ایستگاه اتوبوس متوقف می کند تا خانمی را که در آن جا منتظر اتوبوس است را سوار کند. بعد از سوار شدن آن خانم اتوبوس به حرکت خود ادامه می دهد تا زمانی به جلوی دانشگاه برسد و مسافرش را پیاده کند. در این برنامه کاربر می تواند با استفاده از کلید های جهت دار صفحه کلید حرکت اتوبوس را کنترل کند.
در زیر برخی از توابع استفاده شده در این پروژه را مشاهده می کنید:
- تابع woman: خانمی که در ایستگاه ایستاده و سوار اتوبوس می شود را ترسیم می کند.
- تابع text: برای ترسیم متن بر روی صفحه نمایش استفاده می شود.
- تابع lamppost: برای رسم تیر چراغ برق های موجود در جاده استفاده می شود.
- تابع man: برای رسم مردی که در ایستگاه اتوبوس ایستاده است، استفاده می شود.
- تابع polygon: برای ترسیم اشکال چند ضلعی استفاده می شود.
- تابع colorcube: برای رنگ آمیزی اشکال مختلف استفاده می شود.
- تابع bus_stop: برای برای توقف اتوبوس مورد استفاده قرار می گیرد.
- تابع tree12: برای رسم درختان موجود در صفحه استفاده می شود.
- تابع wheel1: برای رسم چرخ های اتوبوس استفاده می شود.
- تابع road2: برای ترسیم جاده های موجود در صفحه استفاده می شود.
قسمت های از سورس پروژه:
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 131 132 133 | #include <stdlib.h> #include <gl\glut.h> #include<string.h> #include<stdio.h> int x = -150, o = 0, xd = -150; int x1 = 0, z = 0; float a = 0, a1 = 0, moving, angle = 0; float z5 = 0, u = 0, flag12 = 0, begin; float k = 0, y2 = 0; int flag = 0, flag55 = 0, var = 0, flag1 = 0, flag551 = 0, vari = 0, vard = 0, varid = 0, then = 0; float p = 0.0, q = 0.0; #define maxx 10 #define maxy 12 #define dx 27.7 #define dy 12 GLfloat xangle = 0.0, yangle = 0.0, zangle = 0.0; /* axis angles */ GLfloat vertices[][3] = { { 160,390,-70 },{ 425,390,-70 }, { 425,510,-70 },{ 160,520,-70 }, { 135,370,70 },{ 400,370,70 }, { 400,490,70 },{ 135,500,70 }, { 135,447,70 },{ 400,447,70 }, { 425,467,-70 },{ 410,520,-70 }, { 385,500,70 },{ 160,467,-70 }, { 320,467,-70 },{ 320,520,-70 }, { 380,520,-70 },{ 380,390,-70 },{ 320,390,-70 } }; GLfloat colors[][3] = { { 1.0,1.0,0.0 },{ 0.0,0.6,0.7 },{ .3,.4,.5 } }; GLfloat verticesd[][3] = { { 160,390 - 175,-70 },{ 425,390 - 175,-70 }, { 425,510 - 175,-70 },{ 160,520 - 175,-70 }, { 135,370 - 175,70 },{ 400,370 - 175,70 }, { 400,490 - 175,70 },{ 135,500 - 175,70 }, { 135,447 - 175,70 },{ 400,447 - 175,70 }, { 425,467 - 175,-70 },{ 410,520 - 175,-70 }, { 385,500 - 175,70 },{ 160,467 - 175,-70 }, { 320,467 - 175,-70 },{ 320,520 - 175,-70 }, { 380,520 - 175,-70 },{ 380,390 - 175,-70 },{ 320,390 - 175,-70 } }; GLfloat colorsd[][3] = { { 1.0,1.0,0.0 },{ 0.0,0.6,0.7 },{ .3,.4,.5 } }; // FUNCTION wheel void wheel1() { glColor3f(0, 0, 0); glPushMatrix(); glTranslatef(345, 377, -70); glutSolidTorus(5, 15, 100, 90); glPopMatrix(); glPushMatrix(); glTranslatef(190, 377, -70); glutSolidTorus(5, 15, 100, 90);//front two wheels tyre glPopMatrix(); glColor3ub(100, 100, 100); glPushMatrix(); glTranslatef(345, 377, -70); glutSolidTorus(5, 5, 10, 69); glPopMatrix(); glPushMatrix(); glTranslatef(190, 377, -70); glutSolidTorus(5, 5, 10, 69); glPopMatrix();// front two wheels } void wheel2() { glColor3f(0, 0, 0); glPushMatrix(); glTranslatef(180, 370, 70); glutSolidTorus(5, 15, 100, 90); glPopMatrix(); glPushMatrix(); glTranslatef(335, 370, 70); glutSolidTorus(5, 15, 100, 90); glPopMatrix(); //back two wheels tyre glColor3ub(100, 100, 100); glPushMatrix(); glTranslatef(335, 370, 70); glutSolidTorus(5, 5, 10, 69); glPopMatrix(); glPushMatrix(); glTranslatef(180, 370, 70); glutSolidTorus(5, 5, 10, 69); glPopMatrix(); //back two wheels } void polygon(int a, int b, int c, int d, int E, int f) { glBegin(GL_POLYGON); glColor3fv(colors[E]); glVertex3fv(vertices[a]); glVertex3fv(vertices[b]); glVertex3fv(vertices[c]); glVertex3fv(vertices[d]); if (f != 0) glVertex3fv(vertices[f]); glEnd(); } void colorcube() { int i; wheel1(); polygon(0, 1, 5, 4, 0, 0); polygon(13, 14, 18, 0, 0, 0); polygon(15, 16, 17, 18, 2, 0); polygon(16, 11, 2, 1, 0, 17); polygon(0, 4, 8, 13, 0, 0); polygon(1, 10, 9, 5, 0, 0); polygon(9, 10, 2, 6, 1, 0); polygon(4, 5, 9, 8, 0, 0); polygon(8, 9, 6, 12, 1, 7); glColor3ub(100, 40, 50); for (i = 0; i <= 180; i += 45) { glBegin(GL_LINES); glVertex3f(180 + i, 447, 70); glVertex3f(180 + i, 500, 70); glEnd(); } polygon(13, 8, 7, 3, 1, 0); polygon(3, 15, 14, 13, 1, 0); polygon(6, 2, 11, 12, 0, 0); polygon(11, 3, 7, 12, 0, 0); wheel2(); } /************** main ***********/ int main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH); glutInitWindowSize(1000, 650); glutInitWindowPosition(0, 0); glutCreateWindow("SourceSara.Com | Bus Stop"); glutDisplayFunc(display); glutMouseFunc(mouse); glutSpecialFunc(SpecialKeyFunc); glutReshapeFunc(myreshape); glutMainLoop(); return 1; } |
نکات
- این پروژه در نرم افزار Visual Studio نسخه 2015 تست شده است و به خوبی کار می کند.
- به منظور اجرای پروژه های OpenGL باید آن را بر روی IDE خود نصب کنید (آموزش نصب OpenGL).
- در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.
هیچ نظری ثبت نشده است