一、绘制折线图
glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j])函数可以绘制GLUT位图字符,第一个参数是GLUT中指定的特定字形集,第二个参数是要写入的单个字符;
#include <glut.h> GLsizei windowWidth=600,windowHeight=600;
GLubyte label[36]={'O','n','e', 'T','w','o', 'T','h','r', 'F','o','u','F','i','v', 'S','i','x', 'S','e','v', 'E','i','g','N','i','e', 'T','e','n', 'E','l','e', 'T','w','e',};
GLint dataValue[12]={452,368,214,543,328,193,322,436,257,268,473,467};void Init()
{glClearColor(1,1,1,1);glMatrixMode(GL_PROJECTION);gluOrtho2D(0,windowWidth,0,windowHeight);
}void LineImage()
{glClear(GL_COLOR_BUFFER_BIT);glColor3f(0,0,1);glLineWidth(2);//绘制折线图glBegin(GL_LINE_STRIP);{for(int i=0;i<12;i++){glVertex2i(20+i*50,dataValue[i]);}}glEnd();//绘制标记点glColor3f(1,0,0);for(int i=0;i<12;i++){glRasterPos2i(15+i*50,dataValue[i]-5);glutBitmapCharacter(GLUT_BITMAP_8_BY_13,'*');}glColor3f(0,0,0);//绘制序列for(int i=0;i<12;i++){glRasterPos2i(15+i*50,150);for(int j=i*3;j<i*3+3;j++){glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j]);}}glFlush();
}void ReshapFunction(GLint x,GLint y)
{glClear(GL_COLOR_BUFFER_BIT);
}int main(int argc, char *argv[])
{ glutInit(&argc, argv); //初始化GLUTglutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(500, 200); glutInitWindowSize(windowWidth, windowHeight); glutCreateWindow("OpenGL");Init();glutDisplayFunc(&LineImage); //回调函数 glutReshapeFunc(ReshapFunction);glutMainLoop(); //持续显示,当窗口改变会重新绘制图形return 0;
}
折线图:
二、柱状图
使用函数glRecti (GLint x1, GLint y1, GLint x2, GLint y2)可以方便的绘制一个填充的矩形区域,第一二个参数是矩形区域的左下角起点,第二三个参数是右上角顶点。
#include <glut.h> GLsizei windowWidth=600,windowHeight=600;
GLubyte label[36]={'O','n','e', 'T','w','o', 'T','h','r', 'F','o','u','F','i','v', 'S','i','x', 'S','e','v', 'E','i','g','N','i','e', 'T','e','n', 'E','l','e', 'T','w','e',};
GLint dataValue[12]={452,368,214,543,328,193,322,436,257,268,473,467};void Init()
{glClearColor(1,1,1,1);glMatrixMode(GL_PROJECTION);gluOrtho2D(0,windowWidth,0,windowHeight);
}void LineImage()
{glClear(GL_COLOR_BUFFER_BIT);glColor3f(0,0,1);for(int i=0;i<12;i++){glRecti(20+i*50,170,30+i*50,dataValue[i]);}glColor3f(0,0,0);//绘制序列for(int i=0;i<12;i++){glRasterPos2i(15+i*50,150);for(int j=i*3;j<i*3+3;j++){glutBitmapCharacter(GLUT_BITMAP_8_BY_13,label[j]);}}glFlush();
}int main(int argc, char *argv[])
{ glutInit(&argc, argv); //初始化GLUTglutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(500, 200); glutInitWindowSize(windowWidth, windowHeight); glutCreateWindow("OpenGL");Init();glutDisplayFunc(&LineImage); //回调函数 glutMainLoop(); return 0;
}
柱状图:
三、饼图
#include <glut.h>
#include <stdlib.h>
#include <math.h>GLsizei windowWidth=600,windowHeight=600;
GLint dataValue[12]={452,368,214,543,328,193,322,436,257,268,473,467};void Init()
{glClearColor(1,1,1,1);glMatrixMode(GL_PROJECTION);gluOrtho2D(0,windowWidth,0,windowHeight);
}void CircleImage()
{glClear(GL_COLOR_BUFFER_BIT);glColor3f(0,0,1); glPointSize(2);glBegin(GL_POINTS);{for(float i=0.0f;i<2*3.1415926f;i+=0.001){glVertex2f((windowWidth/3)*cos(i)+windowWidth/2,(windowHeight/3)*sin(i)+windowHeight/2);}}glEnd(); GLint totalNum=0;for(int i=0;i<12;i++){totalNum+=dataValue[i];}GLfloat angleData[12];for(int i=0;i<12;i++){angleData[i]=2*3.1415926f*(GLfloat)dataValue[i]/totalNum;}for(int j=1;j<12;j++){angleData[j]+=angleData[j-1];}glColor3f(1,0,0);glLineWidth(2);glBegin(GL_LINES);{for(int i=0;i<12;i++){glVertex2f(windowWidth/2,windowHeight/2);glVertex2f((windowWidth/3)*cos(angleData[i])+windowWidth/2,(windowHeight/3)*sin(angleData[i])+windowHeight/2); }glEnd();glFlush();}
}int main(int argc, char *argv[])
{ glutInit(&argc, argv); //初始化GLUTglutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(500, 200); glutInitWindowSize(windowWidth, windowHeight); glutCreateWindow("OpenGL");Init();glutDisplayFunc(&CircleImage); //回调函数 glutMainLoop(); return 0;
}
饼图: