سورس ایستگاه اتوبوس با OpenGL به زبان C++
در این بخش سورس ایستگاه اتوبوس با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. با مشاهده سورس کد این پروژه می توانید مواردی همچون حرکت دوربین، رسم اشکال مختلف، حرکت دادن شیء ها و همچنین تکنیک هایی که در ساخت بازی های ساده در OpenGL استفاده می شوند را بیاموزید. در ادامه می توانید توضیحات و تصاویر مربوط به این برنامه را مشاهده کنید.
توضیحات پروژه
در این پروژه OpenGL، بعد از اجرا شدن برنامه، یک اتوبوس در خیابان حرکت می کند و در ایستگاه اتوبوس متوقف می کند تا خانمی را که در آن جا منتظر اتوبوس است را سوار کند. بعد از سوار شدن آن خانم اتوبوس به حرکت خود ادامه می دهد تا زمانی به جلوی دانشگاه برسد و مسافرش را پیاده کند. در این برنامه کاربر می تواند با استفاده از کلید های جهت دار صفحه کلید حرکت اتوبوس را کنترل کند.
در زیر برخی از توابع استفاده شده در این پروژه را مشاهده می کنید:
- تابع woman: خانمی که در ایستگاه ایستاده و سوار اتوبوس می شود را ترسیم می کند.
- تابع text: برای ترسیم متن بر روی صفحه نمایش استفاده می شود.
- تابع lamppost: برای رسم تیر چراغ برق های موجود در جاده استفاده می شود.
- تابع man: برای رسم مردی که در ایستگاه اتوبوس ایستاده است، استفاده می شود.
- تابع polygon: برای ترسیم اشکال چند ضلعی استفاده می شود.
- تابع colorcube: برای رنگ آمیزی اشکال مختلف استفاده می شود.
- تابع bus_stop: برای برای توقف اتوبوس مورد استفاده قرار می گیرد.
- تابع tree12: برای رسم درختان موجود در صفحه استفاده می شود.
- تابع wheel1: برای رسم چرخ های اتوبوس استفاده می شود.
- تابع road2: برای ترسیم جاده های موجود در صفحه استفاده می شود.
قسمت های از سورس پروژه:
#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 نسخه ۲۰۱۵ تست شده است و به خوبی کار می کند.
- به منظور اجرای پروژه های OpenGL باید آن را بر روی IDE خود نصب کنید (آموزش نصب OpenGL).
- در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.
نوشته سورس ایستگاه اتوبوس با OpenGL به زبان C++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.