#include <windows.h>
#include <gl/glut.h>
GLuint Wheel1;//前
GLuint Wheel2;//中
GLuint Wheel3;//后
GLuint Frame;
GLuint Frame1;//转动的踏板 前
GLuint Frame2;//转动的踏板 后
static GLfloat spin = 0.0;
void spinDisplay(void)
{
spin = spin + 0.3;
if (spin > 360.0)
spin = spin - 360.0;
glutPostRedisplay();
}
void Initial(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
Wheel1 = glGenLists(1); // 前轮
glNewList(Wheel1, GL_COMPILE);
glColor3f(0.0, 0.0, 0.0);
glutSolidTorus(0.8, 20.0, 15, 50); //线条粗细,半径,
glutSolidTorus(0.8, 5.0, 15, 50);
glutSolidTorus(0.8, 1.0, 15, 50);
glBegin(GL_LINES); //前轮连杆
glVertex2i(0,0);
glVertex2i(0,20);
glEnd();
glEndList();
Wheel2 = glGenLists(1); //后齿轮
glNewList(Wheel2, GL_COMPILE);
glColor3f(0.0, 0.0, 0.0);
glutSolidTorus(0.8, 20.0, 15, 50);
glutSolidTorus(0.8, 5.0, 15, 50);
glutSolidTorus(0.8, 1.0, 15, 50);
glBegin(GL_LINES);
glVertex2i(0,0);
glVertex2i(0,20);
glEnd();
glEndList();
Wheel3 = glGenLists(1); //中间齿轮
glNewList(Wheel3, GL_COMPILE);
glColor3f(0.0, 1.0, 0.0);
glutSolidTorus(0.6, 7.0, 15, 50);
glEndList();
Frame = glGenLists(1);
glNewList(Frame, GL_COMPILE); //自行车框架
glColor3f(1.0, 0.5, 0.0);
glLineWidth(5);
glTranslatef(-20.0, 20.0, 0.0);
glBegin(GL_LINES); //三角形支架
glVertex2i(-10,5);
glVertex2i(50,5);
glEnd();
glBegin(GL_LINES);
glVertex2i(-10,5);
glVertex2i(20,-35);
glEnd();
glBegin(GL_LINES);
glVertex2i(20,-35);
glVertex2i(50,5);
glEnd();
glBegin(GL_LINES); //前轮连杆
glVertex2i(-6,20);
glVertex2i(-20,-35);
glEnd();
glBegin(GL_LINES); //车把
glVertex2i(-15,21);
glVertex2i(3,19);
glEnd();
glBegin(GL_LINES);
glVertex2i(-15,21);
glVertex2i(-8,25);
glEnd();
glBegin(GL_LINES);
glVertex2i(3,19);
glVertex2i(9,23);
glEnd();
glBegin(GL_LINES); //后轮连杆
glVertex2i(50,5);
glVertex2i(64,-35);
glEnd();
glBegin(GL_LINES);
glVertex2i(50,5);
glVertex2i(50,6 );
glEnd();
glColor3f(0.5, 0.5, 0.5);
glLineWidth(2);
glBegin(GL_LINES); //链条(上)
glVertex2i(20,-28);
glVertex2i(64,-30);
glEnd();
glBegin(GL_LINES); //链条 (下)
glVertex2i(20,-42);
glVertex2i(64,-40);
glEnd();
glColor3f(1.0, 0.5, 0.5);
glLineWidth(3);
glBegin(GL_LINE_LOOP); //车座
glVertex2i(45,10);
glVertex2i(44,9);
glVertex2i(44,8);
glVertex2i(55,5);
glVertex2i(55,6);
glVertex2i(55,7);
glVertex2i(54,12);
glVertex2i(53,13);
glEnd();
glEndList();
Frame1 = glGenLists(1);//前踏板
glNewList(Frame1, GL_COMPILE);
glColor3f(1.0, 0.5, 0.0);
glBegin(GL_LINES);
glVertex2i(0,0);
glVertex2i(5,-10);
glEnd();
glBegin(GL_LINES);
glVertex2i(5,-10);
glVertex2i(2,-13);
glEnd();
glEndList();
Frame2 = glGenLists(1);//后踏板
glNewList(Frame2, GL_COMPILE);
glColor3f(1.0, 0.5, 0.0);
glBegin(GL_LINES);
glVertex2i(0,0);
glVertex2i(-5,10);
glEnd();
glBegin(GL_LINES);
glVertex2i(-5,10);
glVertex2i(-2,13);
glEnd();
glEndList();
}
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D (-70.0f, 70.0f, -70.0f, 70.0f);
}
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix(); //后踏板
glTranslatef(20.0,-35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Frame2);
glPopMatrix();
glPushMatrix();//前轮
glTranslatef(-20.0, -35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Wheel1);
glPopMatrix();
glPushMatrix(); //后轮
glTranslatef(64.0,-35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Wheel2);
glPopMatrix();
glPushMatrix(); //中间齿轮
glTranslatef(18.0,-35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Wheel3);
glPopMatrix();
glPushMatrix(); //前踏板
glTranslatef(20.0,-35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Frame1);
glPopMatrix();
//支架显示列表 不动
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, 0.0);
glCallList(Frame);
glFlush();
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(800,600);
glutInitWindowPosition(200,200);
glutCreateWindow("自行车");
glutIdleFunc(spinDisplay);
glutDisplayFunc(Display);
glutReshapeFunc(ChangeSize);
Initial();
glutMainLoop();
return 0;
}
#include <gl/glut.h>
GLuint Wheel1;//前
GLuint Wheel2;//中
GLuint Wheel3;//后
GLuint Frame;
GLuint Frame1;//转动的踏板 前
GLuint Frame2;//转动的踏板 后
static GLfloat spin = 0.0;
void spinDisplay(void)
{
spin = spin + 0.3;
if (spin > 360.0)
spin = spin - 360.0;
glutPostRedisplay();
}
void Initial(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
Wheel1 = glGenLists(1); // 前轮
glNewList(Wheel1, GL_COMPILE);
glColor3f(0.0, 0.0, 0.0);
glutSolidTorus(0.8, 20.0, 15, 50); //线条粗细,半径,
glutSolidTorus(0.8, 5.0, 15, 50);
glutSolidTorus(0.8, 1.0, 15, 50);
glBegin(GL_LINES); //前轮连杆
glVertex2i(0,0);
glVertex2i(0,20);
glEnd();
glEndList();
Wheel2 = glGenLists(1); //后齿轮
glNewList(Wheel2, GL_COMPILE);
glColor3f(0.0, 0.0, 0.0);
glutSolidTorus(0.8, 20.0, 15, 50);
glutSolidTorus(0.8, 5.0, 15, 50);
glutSolidTorus(0.8, 1.0, 15, 50);
glBegin(GL_LINES);
glVertex2i(0,0);
glVertex2i(0,20);
glEnd();
glEndList();
Wheel3 = glGenLists(1); //中间齿轮
glNewList(Wheel3, GL_COMPILE);
glColor3f(0.0, 1.0, 0.0);
glutSolidTorus(0.6, 7.0, 15, 50);
glEndList();
Frame = glGenLists(1);
glNewList(Frame, GL_COMPILE); //自行车框架
glColor3f(1.0, 0.5, 0.0);
glLineWidth(5);
glTranslatef(-20.0, 20.0, 0.0);
glBegin(GL_LINES); //三角形支架
glVertex2i(-10,5);
glVertex2i(50,5);
glEnd();
glBegin(GL_LINES);
glVertex2i(-10,5);
glVertex2i(20,-35);
glEnd();
glBegin(GL_LINES);
glVertex2i(20,-35);
glVertex2i(50,5);
glEnd();
glBegin(GL_LINES); //前轮连杆
glVertex2i(-6,20);
glVertex2i(-20,-35);
glEnd();
glBegin(GL_LINES); //车把
glVertex2i(-15,21);
glVertex2i(3,19);
glEnd();
glBegin(GL_LINES);
glVertex2i(-15,21);
glVertex2i(-8,25);
glEnd();
glBegin(GL_LINES);
glVertex2i(3,19);
glVertex2i(9,23);
glEnd();
glBegin(GL_LINES); //后轮连杆
glVertex2i(50,5);
glVertex2i(64,-35);
glEnd();
glBegin(GL_LINES);
glVertex2i(50,5);
glVertex2i(50,6 );
glEnd();
glColor3f(0.5, 0.5, 0.5);
glLineWidth(2);
glBegin(GL_LINES); //链条(上)
glVertex2i(20,-28);
glVertex2i(64,-30);
glEnd();
glBegin(GL_LINES); //链条 (下)
glVertex2i(20,-42);
glVertex2i(64,-40);
glEnd();
glColor3f(1.0, 0.5, 0.5);
glLineWidth(3);
glBegin(GL_LINE_LOOP); //车座
glVertex2i(45,10);
glVertex2i(44,9);
glVertex2i(44,8);
glVertex2i(55,5);
glVertex2i(55,6);
glVertex2i(55,7);
glVertex2i(54,12);
glVertex2i(53,13);
glEnd();
glEndList();
Frame1 = glGenLists(1);//前踏板
glNewList(Frame1, GL_COMPILE);
glColor3f(1.0, 0.5, 0.0);
glBegin(GL_LINES);
glVertex2i(0,0);
glVertex2i(5,-10);
glEnd();
glBegin(GL_LINES);
glVertex2i(5,-10);
glVertex2i(2,-13);
glEnd();
glEndList();
Frame2 = glGenLists(1);//后踏板
glNewList(Frame2, GL_COMPILE);
glColor3f(1.0, 0.5, 0.0);
glBegin(GL_LINES);
glVertex2i(0,0);
glVertex2i(-5,10);
glEnd();
glBegin(GL_LINES);
glVertex2i(-5,10);
glVertex2i(-2,13);
glEnd();
glEndList();
}
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D (-70.0f, 70.0f, -70.0f, 70.0f);
}
void Display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPushMatrix(); //后踏板
glTranslatef(20.0,-35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Frame2);
glPopMatrix();
glPushMatrix();//前轮
glTranslatef(-20.0, -35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Wheel1);
glPopMatrix();
glPushMatrix(); //后轮
glTranslatef(64.0,-35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Wheel2);
glPopMatrix();
glPushMatrix(); //中间齿轮
glTranslatef(18.0,-35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Wheel3);
glPopMatrix();
glPushMatrix(); //前踏板
glTranslatef(20.0,-35.0, 0.0);
glRotatef(spin, 0.0, 0.0, 1.0);
glCallList(Frame1);
glPopMatrix();
//支架显示列表 不动
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, 0.0);
glCallList(Frame);
glFlush();
glutSwapBuffers();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(800,600);
glutInitWindowPosition(200,200);
glutCreateWindow("自行车");
glutIdleFunc(spinDisplay);
glutDisplayFunc(Display);
glutReshapeFunc(ChangeSize);
Initial();
glutMainLoop();
return 0;
}