- 定义数据类型
typedef struct{ GLfloat x; // x 坐标 GLfloat y; // y 坐标} Vertex2F;typedef struct{ GLfloat r; // red (0~1) GLfloat g; // green GLfloat b; // blue GLfloat a; // alpha} Color4F;
- 定义顶端数据
static Color4F red_color = {1.0f,0.0f,0.0f,1.0f};static Color4F green_color = {0.0f,1.0f,0.0f,1.0f};static Color4F blue_color = {0.0f,0.0f,1.0f,1.0f};static Vertex2F trangle_vertexes [3] ={ {10,10},{100,10},{100,100}};static Vertex2F rect_vertexes [4] ={ {20,200},{200,200}, {20,300},{200,300}};static Vertex2F polygon_vertexes [6] ={ {350,50},{450,120}, {450,220},{350,300}, {250,220},{250,120},};
- 绘制三角形
void draw_trangle(){ glEnableClientState(GL_VERTEX_ARRAY); glColor4f(red_color.r,red_color.g,red_color.b,red_color.a); glVertexPointer(sizeof(Vertex2F)/sizeof(GLfloat),GL_FLOAT,0,trangle_vertexes); glDrawArrays(GL_TRIANGLE_STRIP,0,3);}
- 绘制矩形
void draw_rect(){ glEnableClientState(GL_VERTEX_ARRAY); glColor4f(green_color.r,green_color.g,green_color.b,green_color.a); glVertexPointer(sizeof(Vertex2F)/sizeof(GLfloat),GL_FLOAT,0,rect_vertexes); glDrawArrays(GL_TRIANGLE_STRIP,0,4);}
- 绘制任意多边形
void draw_polygon(){ glEnableClientState(GL_VERTEX_ARRAY); glColor4f(blue_color.r,blue_color.g,blue_color.b,blue_color.a); glVertexPointer(sizeof(Vertex2F)/sizeof(GLfloat),GL_FLOAT,0,polygon_vertexes); glDrawArrays(GL_TRIANGLE_FAN,0,6);}
- 统一坐标系(默认opengl的尺寸是整个窗口是坐标是x=0.5,y=0.5,width=1.0,height=1.0),经过下面的处理可以让窗口的大小和opengl里面的大小一致
void reshape(int width,int height){ glViewport(0, 0, width, height); const float& fovy = 60; const float& zeye = height /(tan(fovy*M_PI_2/180)*2); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(fovy, (GLfloat) width / height, 0.5f, 150000.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(width / 2, height / 2, zeye, width / 2, height / 2, 0, 0.0f, 1.0f,0.0f);}
- 在display函数中调用
void display(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); draw_trangle(); draw_rect(); draw_polygon(); glutSwapBuffers(); glutPostRedisplay();}
- 生成程序
g++ DrawShapes.cpp -lGLEW -lGL -lGLU -lglut -o DrawShapes
- 运行效果