سورس رسم خانه سه بعدی با OpenGL به زبان C++

draw 3d house in opengl using cpp 5046 سورس رسم خانه سه بعدی با OpenGL به زبان C++

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

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

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

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

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