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

3d bicycle in opengl using cpp 5184 تصویر

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

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

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

در این پروژه OpenGL، بعد از اجرا شدن برنامه، یک دوچرخه سه بعدی در صفحه گریدبندی شده رسم می شود و با اسفاده از ماوس می توان دوربین را جهت های مختلف حرکت داد. همچنین امکان به حرکت درآوردن دوچرخه با استفاده از کلید + و متوقف کردن آن با کلید – وجود دارد.

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

  • تابع motion: برای حرکت دادن دوچرخه استفاده می شود.
  • تابع drawTyre: برای ترسیم چرخ های دوچرخه استفاده می شود.
  • تابع drawPedals: برای رسم  پدال دوچرخه استفاده می شود.
  • تابع drawChain: برای رسم  زنجیر دوچرخه استفاده می شود.
  • تابع seat: برای ترسیم صندلی دوچرخه استفاده می شود.

3d bicycle in opengl using cpp 5184 1 تصویر

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

#include <gl\glut.h> 
#include <stdio.h> 
#include <math.h> 
#define PI            3.14159 
#define WIN_WIDTH      600 
#define WIN_HEIGHT      500    
#define CYCLE_LENGTH   3.3f 
#define ROD_RADIUS      0.05f 
#define NUM_SPOKES      20 
#define SPOKE_ANGLE      18 
#define RADIUS_WHEEL   1.0f 
#define TUBE_WIDTH      0.08f 
#define RIGHT_ROD      1.6f 
#define RIGHT_ANGLE      48.0f 
#define MIDDLE_ROD      1.7f 
#define MIDDLE_ANGLE   106.0f 
#define BACK_CONNECTOR   0.5f 
#define LEFT_ANGLE      50.0f 
#define WHEEL_OFFSET   0.11f 
#define WHEEL_LEN      1.1f 
#define TOP_LEN         1.5f 
#define CRANK_ROD      0.7f 
#define CRANK_RODS      1.12f 
#define CRANK_ANGLE      8.0f 
#define HANDLE_ROD      1.2f 
#define FRONT_INCLINE   70.0f 
#define HANDLE_LIMIT   70.0f 
#define INC_STEERING   2.0f 
#define INC_SPEED      0.05f 
/*****************************************
*    All the Global Variables are Here
****************************************/
/*****************************************
*   Cycle - related variables
******************************************/
GLfloat pedalAngle, speed, steering;
/*******************************
*   User view realted variables
********************************/
GLfloat camx, camy, camz;
GLfloat anglex, angley, anglez;
/****************************
*   Mouse related variables
****************************/
int prevx, prevy;
GLenum Mouse;
/**************************
*   Cycle position related
*   variables
***************************/
GLfloat xpos, zpos, direction;
void ZCylinder(GLfloat radius, GLfloat length);
void XCylinder(GLfloat radius, GLfloat length);
void drawFrame(void);
void gear(GLfloat inner_radius, GLfloat outer_radius,
GLfloat width, GLint teeth, GLfloat tooth_depth);
void drawChain(void);
void drawPedals(void);
void drawTyre(void);
void drawSeat(void);
void help(void);
void init(void);
void reset(void);
void display(void);
void idle(void);
void updateScene(void);
void landmarks(void);
void special(int key, int x, int y);
void keyboard(unsigned char key, int x, int y);
void mouse(int button, int state, int x, int y);
void motion(int x, int y);
void reshape(int w, int h);
void glSetupFuncs(void);
GLfloat Abs(GLfloat);
GLfloat degrees(GLfloat);
GLfloat radians(GLfloat);
GLfloat angleSum(GLfloat, GLfloat);
/*************************************
*    End of the header file
*************************************/
/**************************************
*   Start of the source file "cycle.c"
**************************************/
//#include "cycle.h" 
/******************************************
*           A
*          1   ========== 2
*           /\        |  B
*          /    \       / 5
*       E /    \D    /
*        /        \   / C
*       /        \ /
*     3 ==========/ 4
*          F
*       1    =   212,82
*       2   =   368,82
*       5   =   369,94
*       3   =   112,220
*       4   =   249,232
*
*       214   =   73
*       124   =   55
*       142   =   52
*       143   =   73
*       134   =   50
*       431   =   57
****************************************/
void ZCylinder(GLfloat radius, GLfloat length)
{
	GLUquadricObj *cylinder;
	cylinder = gluNewQuadric();
	glPushMatrix();
	glTranslatef(0.0f, 0.0f, 0.0f);
	gluCylinder(cylinder, radius, radius, length, 15, 5);
	glPopMatrix();
}
void XCylinder(GLfloat radius, GLfloat length)
{
	glPushMatrix();
	glRotatef(90.0f, 0.0f, 1.0f, 0.0f);
	ZCylinder(radius, length);
	glPopMatrix();
}
// called by idle() 
void updateScene()
{
	GLfloat xDelta, zDelta;
	GLfloat rotation;
	GLfloat sin_steering, cos_steering;
	// if the tricycle is not moving then do nothing 
	if (-INC_SPEED < speed && speed < INC_SPEED) return;
	if (speed < 0.0f)
		pedalAngle = speed = 0.0f;
	// otherwise, calculate the new position of the tricycle 
	// and the amount that each wheel has rotated. 
	// The tricycle has moved "speed*(time elapsed)". 
	// We assume that "(time elapsed)=1". 
	xDelta = speed*cos(radians(direction + steering));
	zDelta = speed*sin(radians(direction + steering));
	xpos += xDelta;
	zpos -= zDelta;
	pedalAngle = degrees(angleSum(radians(pedalAngle), speed / RADIUS_WHEEL));
	// we'll be using sin(steering) and cos(steering) more than once 
	// so calculate the values one time for efficiency 
	sin_steering = sin(radians(steering));
	cos_steering = cos(radians(steering));
	// see the assignment 3 "Hint" 
	rotation = atan2(speed * sin_steering, CYCLE_LENGTH + speed * cos_steering);
	direction = degrees(angleSum(radians(direction), rotation));
}
/*****************************
*   Reset The scene
*****************************/
void reset()
{
	anglex = angley = anglez = 0.0f;
	pedalAngle = steering = 0.0f;
	Mouse = GLUT_UP;
	pedalAngle = speed = steering = 0.0f;
	camx = camy = 0.0f;
	camz = 5.0f;
	xpos = zpos = 0.0f;
	direction = 0.0f;
}
int main(int argc, char *argv[])
{
	help();
 	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
	glutInitWindowPosition(300, 100);
	glutInitWindowSize(WIN_WIDTH, WIN_HEIGHT);
	glutCreateWindow("SourceSara.Com | 3D Bicycle");
	init();
	glSetupFuncs();
	 glutMainLoop();
}

نکات

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

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

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

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

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

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