#include <windows.h>
#include <gl/glut.h>
GLuint Wheel;
GLuint Frame;
void Initial(void)
{
glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
Wheel = glGenLists(1);
glNewList(Wheel, GL_COMPILE);
glColor3f(255.0, 0.0, 0.0);
glTranslatef(-40.0, -30.0, 0.0);
glutSolidTorus(0.6, 25.0, 15, 50); //前轮
glutSolidTorus(0.15, 4.0, 15, 50); //前齿轮
/**********前轮&前齿轮**********/
glColor3f(255.0, 0.0, 0.0);
glTranslatef(44.0, 0.0, 0.0);
glutSolidTorus(0.2, 7.0, 15, 50);
/**********中间齿轮**********/
glColor3f(255.0, 0.0, 0.0);
glTranslatef(40.0, 0.0, 0.0);
glutSolidTorus(0.6, 25.0, 15, 50);
glutSolidTorus(0.2, 4.0, 15, 50);
/**********后轮&后齿轮**********/
glEndList();
Frame = glGenLists(1);
glNewList(Frame,GL_COMPILE);
glColor3f(0.0, 255, 0.0);
glLineWidth(2);
glTranslatef(-20.0, 0.0, 0.0);
glBegin(GL_LINES); //链条(上)
glVertex2i(26,-28);
glVertex2i(66,-31);
glEnd();
/**********链条(上)**********/
glBegin(GL_LINES); //链条 (下)
glVertex2i(26,-42);
glVertex2i(66,-39);
glEnd();
/**********链条(下)**********/
glColor3f(0.0, 0.0, 255.0);
glLineWidth(2);
glBegin(GL_LINES); //三角形支架
glVertex2i(0,10);
glVertex2i(52,10);
glEnd();
glBegin(GL_LINES);
glVertex2i(0,10);
glVertex2i(26,-35);
glEnd();
glBegin(GL_LINES);
glVertex2i(26,-35);
glVertex2i(52,10);
glEnd();
/**********三角形支架**********/
glBegin(GL_LINES); //前轮连杆
glVertex2i(4,20);
glVertex2i(-18,-35);
glEnd();
glBegin(GL_LINES); //后轮连杆
glVertex2i(52,10);
glVertex2i(66,-35);
glEnd();
glBegin(GL_LINES);
glVertex2i(26,-35);
glVertex2i(66,-35);
glEnd();
/**********车轮连杆**********/
glColor3f(0.0, 0.0, 255);
glBegin(GL_LINES); //车把
glVertex2i(-6,21);
glVertex2i(14,19);
glEnd();
glBegin(GL_LINES);
glVertex2i(-6,21);
glVertex2i(0,26);
glEnd();
glBegin(GL_LINES);
glVertex2i(14,19);
glVertex2i(20,24);
glEnd();
/**********车把**********/
glColor3f(0.0, 0.0, 255.0);
glLineWidth(2);
glBegin(GL_LINES); //车座
glVertex2i(52,10);
glVertex2i(53,14);
glEnd();
glColor3f(0.6, 0.4, 0.12);
glLineWidth(3);
glBegin(GL_LINE_LOOP);
glVertex2i(49,15);
glVertex2i(47,17);
glVertex2i(47,18);
glVertex2i(47,19);
glVertex2i(49,21);
glVertex2i(56,24);
glVertex2i(58,23);
glVertex2i(60,19);
glVertex2i(60,18);
glVertex2i(60,17);
glVertex2i(58,13);
glVertex2i(57,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);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0, 0.0, 0.0);
glCallList(Frame); //调用支架显示列表
glTranslatef(22.0, -5.0, 0.0);
glCallList(Wheel); //调用轮子显示列表
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(600,450);
glutInitWindowPosition(100,100);
glutCreateWindow("OpenGL二维自行车");
glutDisplayFunc(Display);
glutReshapeFunc(ChangeSize);
Initial();
glutMainLoop();
return 0;