سورس رسم خانه سه بعدی با OpenGL به زبان C++
در این بخش سورس رسم خانه سه بعدی با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. با مشاهده سورس کد این پروژه می توانید نحوه ساخت بازی های رایانه ای و چگونگی حرکت دادن دوربین در محیط های مختلف را یاد بگیرید. در ادامه می توانید توضیحات و تصاویر مربوط به این برنامه را مشاهده کنید.
توضیحات پروژه
این پروژه به صورت Console است و زمانی که کاربر آن را اجرا می کند، یک پنجره OpenGL باز می شود. سپس برنامه با استفاده دستورات و توابع موجود یک خانه سه بعد بعدی با رنگ بندی کامل را رسم می کند. در داخل این خانه یک میز غذا خوری، یک ساعت دیواری (که ساعت جاری سیستم را نشان می دهد) و یک پنکه آویزان از سقف قرار داده شده است.
برخی از توابع موجود در این پروژه:
- تابع compound: این تابع به منظور آماده قسمت های مختلف خانه و ترکیب کردن آن ها با هم استفاده می شود.
- تابع watertank: این تابع به منظور رسم تانکر آبی که در پشت بام خانه قرار دارد استفاده می شود.
- تابع terece: این تابع برای رسم پنکه ای که در سقف اتاق قرار دارد استفاده می شود.
- تابع room: این تابع اتاق ها و در های داخل خانه رسم می کند.
- تابع wall: این تابع برای رسم دیوارهای خانه استفاده می شود.
- تابع earth: این تابع به منظور رسم زمین اطراف خانه استفاده می شود.
بعد از اجرای برنامه کاربر می تواند با استفاده از کلید های زیر قسمت های مختلف برنامه از جمله دوربین را کنترل کند:
- کلید S: در نمای داخلی خانه پنکه ای که از سقف اتاق آویزان شده است را به حرکت در می آورد یا متوقف می کند.
- کلید Q: در نمای بیرونی خانه درب آن را باز و بسته می کند.
- کلید ۷: دوربین را به بالای خانه میبرد تا از نمای بالا خانه را ببینید.
- کلید H: درب آهنی کوچک در حیاط را با و یا بسته می کند.
- کلید O: در نمای درونی خانه درب آن را باز و بسته می کند.
- کلید G: درب آهنی بزرگ در حیاط را با و یا بسته می کند.
- کلید T: نمای بیرون از خانه رو نمایش میدهد.
- کلید I: نمای داخلی خانه را نمایش میدهد.
- کلید J: نمای جلوی خانه را نشان میدهد.
- کلید K: نمای پشت خانه را نمایش میدهد.
- کلید ۱: دوربین را به نمای پایین بر می گرداند.
- کلید ۴: دوربین را به سمت راست می برد.
- کلید ۶: دوربین را به سمت چپ می برد.
- کلید ۸: دوربین را به عقب می برد.
- کلید ۲: دوربین را به جلو می برد.
- کلید ۷: دوربین را به بالا می برد.
قسمت های از سورس کد:
#pragma warning(disable : 4996) #include <gl/glut.h> #include <time.h> double w = 1280, h = 720; double view[3] = { 2,2,12.9 }; double look[3] = { 2,2,2 }; int flag = -1; void steps(void); void window(void); void sgate(void); void gate(void); double angle = 0, speed = 5, maino = 0, romo = 0, tro = 0, mgo = 0, sgo = 0; //declarating quadric objects GLUquadricObj *Cylinder; GLUquadricObj *Disk; struct tm *newtime; time_t ltime; GLfloat angle1; //initialisation void myinit(void) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glFrustum(-1.0, 1.0, -1 * w / h, 1 * w / h, 1, 200.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //defining new quadric object Cylinder = gluNewQuadric(); //to set drawing style gluQuadricDrawStyle(Cylinder, GLU_FILL); //to set automatic normals gluQuadricNormals(Cylinder, GLU_SMOOTH); Disk = gluNewQuadric(); gluQuadricDrawStyle(Disk, GLU_FILL); gluQuadricNormals(Disk, GLU_SMOOTH); GLfloat gam[] = { 0.2,.2,.2,1 }; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, gam); } //set material property void matprop(GLfloat amb[], GLfloat dif[], GLfloat spec[], GLfloat shi[]) { glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, amb); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, dif); glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, spec); glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, shi); } //to create wall void wall(double thickness) { glPushMatrix(); glTranslated(2, .5*thickness, 2); glScaled(4.0, thickness, 4.0); glutSolidCube(1.0); glPopMatrix(); } //to create compound wall void wall2(double thickness) { glPushMatrix(); glTranslated(.8, .5*thickness * 4, 3.5); glScaled(1.6, thickness * 4, 7.0); glutSolidCube(1.0); glPopMatrix(); } //to create earth void earth(void) { GLfloat ambient[] = { 1,0,0,1 }; GLfloat specular[] = { 0,1,1,1 }; GLfloat diffuse[] = { .5,.5,.5,1 }; GLfloat shininess[] = { 50 }; matprop(ambient, diffuse, specular, shininess); GLfloat lightIntensity[] = { .7,.7,.7,1 }; GLfloat light_position[] = { 2,5,-3,0 }; glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_DIFFUSE, lightIntensity); glPushMatrix(); glTranslated(0, -.25, 0); glScaled(10000, .5, 1000000); glutSolidCube(1.0); glPopMatrix(); glFlush(); } int main(int argc, char**argv) { glutInit(&argc, argv);//to initialize the glut library glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize(w, h); glutInitWindowPosition(0, 0); glutCreateWindow("Home 3D"); myinit(); glutDisplayFunc(display); glutKeyboardFunc(Keyboard); glutSpecialFunc(mySpecialKeyFunc); menu(); glutFullScreen();//to see o/p in full screen on monitor glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glShadeModel(GL_SMOOTH);//smooth shaded glEnable(GL_DEPTH_TEST);//to remove hidden surface glEnable(GL_NORMALIZE);//to make normal vector to unit vector glClearColor(0, .3, .8, 0); glViewport(0, 0, w, h); glutMainLoop(); return 0; }
نکات
- این پروژه در نرم افزار Visual Studio نسخه ۲۰۱۵ تست شده است و به خوبی کار می کند.
- به منظور اجرای پروژه های OpenGL باید آن را بر روی IDE خود نصب کنید.
- در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.
نوشته سورس رسم خانه سه بعدی با OpenGL به زبان C++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.