سورس پنکه سه بعدی با OpneGL به زبان C++

3d fan in opengl using cpp 5276 تصویر

سورس پنکه سه بعدی با OpneGL به زبان C++

در این بخش سورس پنکه سه بعدی با OpenGL را برای شما آماده کرده ایم که با استفاده از زبان برنامه نویسی C++ نوشته شده است. با مشاهده سورس کد این پروژه می توانید مواردی همچون حرکت دوربین، رسم اشکال مختلف، حرکت دادن شیء ها را بیاموزید. در ادامه می توانید توضیحات و تصاویر مربوط به این برنامه را مشاهده کنید.

توضیحات پروژه

در این پروژه OpenGL، بعد از اجرا شدن برنامه، یک پنکه سه بعدی با استفاده از توابع OpenGL طراحی می شود و کاربر می تواند با استفاده از کلیدهای F4 – F3 – F2 به ترتیب میزان سرعت چرخش پنکه را تنظیم نماید. همچنین با فشار دادن کلید F5 پنکه ثابت می ماند. زمانی که کاربر بر روی صفحه برنامه کلیک چپ ماوس را نگه دارد، دوربین می چرخد و از زوایای مختلف پنکه را نشان می دهد.

در زیر برخی از توابع استفاده شده در این پروژه را مشاهده می کنید:

  • تابع mouse_s: برای هندل کردن کلیک ماوس بر روی صفحه برنامه استفاده می شود.
  • تابع cylinder: برای ترسیم میله ای که پنکه بر روی آن قرار دارد استفاده می شود.
  • تابع init: برای آماده سازی قسمت های مختلف برنامه استفاده می شود.
  • تابع keyboard_s: برای مدیریت کلید های فشار داده شده توسط کاربر استفاده می شود.
  • تابع bilah: برای ترسیم پره های اریب پنکه استفاده می شود.
  • تابع display: این تابع قسمت های مختلف پنکه را نمایش می دهد.
  • تابع resize: برای مدیریت تغییر شکل صفحه برنامه استفاده می شود.
  • تابع blok: برای رسم قسمت پایین پنکه استفاده می شود.

3d fan in opengl using cpp 5276 1 تصویر

قسمت های از سورس پروژه:

#include <windows.h>
#include <gl\glut.h>
#include <cmath>
void cylinder(float rbase, float rtop, float height);
void blok(float tebal, int ratiol, int ratiop);
void bilah(float r_inner, float r_outer, float tebal, int batang);
int screen_width = 800;
int screen_height = 600;
int button_up = 0, button_down = 0;
int Turn = 0;
double rotation_y = 0, rotation_y_plus = -15, direction;
double Rhead = 0, Rheadplus = 0;
double rotate_All = 0, All_plus = 0;
double Angguk = 0, Anggukplus = 0;
double press = 0, pressplus, pressplus1 = 180, pressplus2 = 0, pressplus3 = 0, pressplus4 = 0, pressplus5 = 0;
bool Toleh = true, Tolehpress = true;
bool RightTurn = true;
bool speed1 = true, speed2 = false, speed3 = false, speed4 = false, speed5 = false;
//GLfloat ambient_light[]={0.3,0.3,0.45,1.0};
GLfloat ambient_light[] = { 0.0,0.0,0.45,1.0 };
//GLfloat  source_light[]={0.9,0.8,0.8,1.0};
GLfloat  source_light[] = { 0.8,0.8,0.8,1.0 };
//GLfloat     light_pos[]={7.0,0.0,1.0,1.0};
GLfloat     light_pos[] = { 5.0,0.0,6.0,1.0 };
void init(void)
{
	glColor3f(1.0, 0.0, 1.0);
	glClearColor(1.0, 1.1, 0.1, 0.0);//back color
	glShadeModel(GL_SMOOTH);
	glViewport(0, 0, screen_width, screen_height);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(45.0f, (GLfloat)screen_width / (GLfloat)screen_height, 1.0f, 1000.0f);
	glEnable(GL_DEPTH_TEST);
	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
	glEnable(GL_LIGHTING);
	glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient_light);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, source_light);
	glLightfv(GL_LIGHT0, GL_POSITION, light_pos);
	glEnable(GL_LIGHT0);
	glEnable(GL_COLOR_MATERIAL);
	glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
}
void resize(int width, int height)
{
	screen_width = width;
	screen_height = height;
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glViewport(0, 0, screen_width, screen_height);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(45.0f, (GLfloat)screen_width / (GLfloat)screen_height, 1.0f, 1000.0f);
	glutPostRedisplay();
}
void cylinder(float rbase, float rtop, float height)
{
	float i;
	glPushMatrix();
	glTranslatef(0.0, 0.0, -rbase / 4);
	glutSolidCone(rbase, 0, 32, 4);
	for (i = 0; i <= height; i += rbase / 8)
	{
		glTranslatef(0.0, 0.0, rbase / 8);
		glutSolidTorus(rbase / 4, rbase - ((i*(rbase - rtop)) / height), 16, 16);
	}
	glTranslatef(0.0, 0.0, rbase / 4);
	glutSolidCone(rtop, 0, 32, 4);
	glPopMatrix();
}
void bilah(float r_inner, float r_outer, float tebal, int batang)
{
	float i;
	glPushMatrix();
	glTranslatef(0.0, 0.0, -tebal / 4);
	cylinder(r_inner, r_inner, tebal);
	glTranslatef(0.0, 0.0, tebal / 2);
	glRotatef(90, 0.0, 1.0, 0.0);
	for (i = 0; i<batang; i++)
	{
		glTranslatef(0.0, 0.0, r_inner);
		glRotatef(315, 0.0, 0.0, 1.0);
		blok(0.5, r_inner*4.5, (r_outer - r_inner + (r_inner / 4)) * 2);
		glRotatef(45, 0.0, 0.0, 1.0);
		glTranslatef(0.0, 0.0, -r_inner);
		glRotatef(360 / batang, 1.0, 0.0, 0.0);
	}
	glPopMatrix();
}
int main(int argc, char **argv)
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(screen_width, screen_height);
	glutInitWindowPosition(0, 0);
	glutCreateWindow("SourceSara.Com | Animated Fan");
	glutDisplayFunc(display);
	glutIdleFunc(display);
	glutReshapeFunc(resize);
	glutSpecialFunc(keyboard_s);
	glutMouseFunc(Mouse_s);
	init();
	glutMainLoop();
	return(0);
}

نکات

  • این پروژه در نرم افزار Visual Studio نسخه ۲۰۱۵ تست شده است و به خوبی کار می کند.
  • به منظور اجرای پروژه های OpenGL باید آن را بر روی IDE خود نصب کنید (آموزش نصب OpenGL).
  • در صورت نا مفهوم بودن بخشی از کد، می توانید در قسمت نظرات مطرح کنید تا برای شما توضیح داده شود.

نوشته سورس پنکه سه بعدی با OpneGL به زبان C++ اولین بار در سورس سرا - آموزش برنامه نویسی. پدیدار شد.

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

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

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

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