
GLsizei winWidth= 600,winHeight= 500; //初始化显示窗口大小数据
GLint xRaster =25 ,yRaster=150; //初始化栅格坐标
GLbyte lable [36] = {'J','a','n','F','e','b','M','a','r', \
'A','p','r','M','a','y','J','u','n',
'J','u','l','A','u','g','S','e','p',
'O','c','t','N','o','v','D','e','c'};
GLint dataValue [12] ={420,342,324,310,262,185,
190,196,217,240,312,438};
void init(void)
{
glClearColor(1.0,1.0,1.0,1.0); //设置清除窗口颜色为白色
glMatrixMode(GL_PROJECTION);//设置投影类型
gluOrtho2D(0.0,600.0,0.0,500.0); //设置坐标参数范围x从0至600,y从0至500
}
void LineGraph(void)
{
GLint month,k;
GLint x=30; //初始化表的x坐标
glClear(GL_COLOR_BUFFER_BIT); //清除设置窗口
glColor3f(0.0,0.0,1.0); //设置线元颜色为蓝色
glBegin(GL_LINE_STRIP); //将数据画为多条线段
for (k = 0;k < 12;k++)
glVertex2i(x+k*50,dataValue[k]);
glEnd();
glColor3f(1.0,0.0,0.0); //设置标记颜色为红色
for(k = 0;k < 12;k++){ //将数据画为星号多点标记
glRasterPos2i (xRaster + k*50,dataValue [k] - 4); //设置当前光栅位置
glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'*');
}
//
// glColor3f(0.0,0.0,0.0); //设置文本颜色为黑色
// xRaster = 20;
// for (month = 0;month < 12;month++) //显示图表标签
// {
// glRasterPos2i(xRaster,yRaster);
// for (k = 3*month;k<3*month + 3;k++)
// glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12,lable[k]);
// xRaster += 50;
// }
glFlush();
}
void winReshapeFcn(GLint newWidth,GLint newHeight)
{
glMatrixMode (GL_PROJECTION );
glLoadIdentity(); //使前面任意的投影参数值对新的投影设置不起作用
gluOrtho2D(0.0,GLdouble(newWidth),0.0,GLdouble(newHeight));
glClear(GL_COLOR_BUFFER_BIT);
}
void main(int argc,char** argv)
{
glutInit (&argc,argv);// 初始化GLUT.
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB); // 设置显示模式为单缓冲且使用RGB颜色模式.
glutInitWindowPosition (100, 100); // 设置初始窗口的位置为100,100.
glutInitWindowSize(winWidth, winHeight);// 设置显示窗口的宽和高像素.
glutCreateWindow("Line Chart Data Plot");// 创建显示窗口并赋予标题.
init(); // 执行初始化过程.
glutDisplayFunc(LineGraph); // 将图形赋予窗口.
glutReshapeFunc(winReshapeFcn); //允许对窗口尺寸的改变做出回应
glutMainLoop();// 显示图形并等待.
}
注释掉的语句取消注释,前面画好的星号位置就要改变,则是怎么回事?注释掉后,星号据正常显示,应该互不干扰才是?盼高手解答
一个很小很小的错误。
在绘制文本的时候,改变了xRaster的值:// xRaster += 50;
所以下次重绘的时候,*号的位置就变了。
解决办法也很简单,在绘制*号之前,重新把xRaster修改为25就行了。
glColor3f(1.0,0.0,0.0); //设置标记颜色为红色
xRaster = 25;
for(k = 0;k < 12;k++){ //将数据画为星号多点标记
glRasterPos2i (xRaster + k*50,dataValue [k] - 4); //设置当前光栅位置
glutBitmapCharacter(GLUT_BITMAP_9_BY_15,'*');
另外想问下楼主你学OpenGL是做什么差雀滚?之虚余岁姿前在学校里因为导师的项目需要,用了一年的OpenGL,现在基本上荒废掉了。