資源簡介
利用OpenGL 實現自行車的運動模擬,主要包括車輪的旋轉,自行車的向前運動等

代碼片段和文件信息
#include
#include
#include
#define?PI?3.1415926
GLfloat?t=0.0;
GLfloat?theta=0.0;
void?init(){
glClearColor(1.0f1.0f1.0f1.0f);
glShadeModel(GL_PROJECTION);
gluOrtho2D(0.0800.00.0400.0);
glClear(GL_COLOR_BUFFER_BIT);
}
void?drawcircle(double?xdouble?ydouble?r){ //畫車輪
glBegin(GL_LINE_LOOP);
for(int?i=0;i<30;i++){
double?delta=2*PI*i/30;
glColor3f(010);
glVertex2f(x+r*cos(delta+theta)y+r*sin(delta+theta)); //車輪外圈
glVertex2f(xy);
glVertex2f(x+r*cos(delta+theta)y+r*sin(delta+theta)); //車軸
}
glEnd();
}
void?drawBicycle(double?xdouble?y){
glLineWidth(10.0); //地面
glBegin(GL_QUADS);
glColor3f(0.00.00.0);
glVertex2f(0.060.0);
glVertex2f(0.00.0);
glVertex2f(1200.00.0);
glVertex2f(1200.060.0);
glEnd();
glTranslatef(t?0.0f?0.0f);
glLineWidth(3.0);
glBegin(GL_LINES); //車橫梁
glColor3f(0.00.01.0);
glVertex2f(30.0+x30.0+y);
glVertex2f(130.0+x30.0+y);
glEnd();
glBegin(GL_LINES); //車座
glVertex2f(70.0+x30.0+y);
glVertex2f(70.0+x60.0+y);
glEnd();
glBegin(GL_LINES);
glColor3f(1.00.00.0);
glVertex2f(62.5+x60.0+y);
glVertex2f(77.5+x60.0+y);
glEnd();
glBegin(GL_LINES); //車把
glColor3f(0.00.01.0);
glVertex2f(90.0+x30.0+y);
glVertex2f(90.0+x70.0+y);
glEnd();
glBegin(GL_LINES);
glColor3f(0.00.00.0);
glVertex2f(82.5+x70.0+y);
glVertex2f(97.5+x70.0+y);
glVertex2f(82.5+x70.0+y);
glVertex2f(75.5+x72.0+y);
glVertex2f(97.5+x70.0+y);
glVertex2f(87.5+x72.5+y);
glEnd();
drawcircle(30+x30+y30); //后車輪
drawcircle(130+x30+y30); //前車輪
theta+=30.0f;
if(?theta?>?360.0f)???
theta?=?0.0f; //車輪旋轉變化
t+=0.05f;
if(?t?>?800.0f)???
t?=?0.0f; //車身平移變化
glutPostRedisplay();
}
void?display(){
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
drawBicycle(050); //小車的位置可調
glFlush();
glutSwapBuffers();
}
void?reshape(int?w?int?h)?
{??????
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0800.00.0400.0);
glClear(GL_COLOR_BUFFER_BIT);?
}?
int?main(int?argc?char**?argv){
glutInit(&argc?argv);
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
glutInitWindowSize(1200600);
glutCreateWindow(“自行車“);
glutReshapeFunc(reshape);
glutDisplayFunc(display);
init();
glutMainLoop();
return?0;
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2411??2015-05-05?14:06??運動的自行車\自行車.cpp
?????文件??????32768??2015-05-05?11:30??運動的自行車\自行車.exe
?????文件??????95628??2015-05-05?12:01??運動的自行車\自行車.PNG
?????目錄??????????0??2015-05-10?23:14??運動的自行車
-----------?---------??----------?-----??----
???????????????130807????????????????????4
- 上一篇:時鐘繪制OpenGL
- 下一篇:微軟API放大鏡
評論
共有 條評論