https://wenku.baidu.com/view/28cd5ebfaf1ffc4fff47accf.html
一下为测试代码
/* ========================================================== 环境说明: IDE:vs2015 studio 辅助工具库:freeglut opengl扩展库:glew 实现功能: 在笛卡尔二维平面坐标系中,制作二次函数、反比例函数、 正弦以及余弦函数的图像,并通过键盘四个方向键调整其 中部分函数的参数值,从而达到改变函数图像的形状。 作者信息: 单位:黑山县大虎山镇初级中学 姓名:董国磊 邮箱:stupidmule@126.com 手机:13897899826 ========================================================== */ #include <GL/glut.h>//导入辅助工具库及其他头文件 #include <stdlib.h> #include <math.h> #include <stdio.h> #include <iostream> using namespace std; //全局变量声明 GLfloat k1 = 1.0f; GLfloat k2 = 1.0f; const GLfloat factor = 0.1f; //函数原型声明 void myDisplay();//回调函数 void mykeys(int key, int x, int y); //主函数入口 int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowPosition(100, 100); glutInitWindowSize(800, 800); glutCreateWindow("OpenGL画多个函数图像"); glutDisplayFunc(&myDisplay); //注册显示回调函数 glutSpecialFunc(&mykeys); //注册特殊按键回调函数 glutMainLoop(); //主消息循环启动 return 0; } //显示函数 void myDisplay(void) { //opengl全局状态变量 GLfloat x; glClear(GL_COLOR_BUFFER_BIT); //清除颜色缓存 glClearColor(1.0, 1.0, 1.0, 1.0); glEnable(GL_LINE_SMOOTH); //坐标轴 glViewport(0, 0, 800, 800); glLineWidth(3); //线宽 glBegin(GL_LINES); //画坐标轴 glColor3f(0.0, 0.0, 0.0); //颜色设置成黑色 glVertex2f(-1, 0.0f); glVertex2f(1, 0.0f); glVertex2f(0.0f, -1); glVertex2f(0.0f, 1); glEnd(); //画余弦函数:f(x)=cos(x) glLineWidth(1); //改变线宽 glBegin(GL_LINE_STRIP); glColor3f(1.0, 0.0, 0.0); for (x = -1.0f / factor; x<1.0f / factor; x += 0.01f) { glVertex2f(x*factor, cos(x)*factor); } glEnd(); //画正弦函数:f(x)=sin(x) glLineWidth(1); glBegin(GL_LINE_STRIP); glColor3f(0.0, 1.0, 0.0); //颜色设置成绿色 for (x = -1.0f / factor; x<1.0f / factor; x += 0.01f) { glVertex2f(x*factor, sin(k1*x)*factor); } glEnd(); //画二次函数:f(x)=x^2 glLineWidth(2); glBegin(GL_LINE_STRIP); glColor3f(0.0, 0.0, 1.0); //颜色设置成蓝色 for (x = -1.0f / factor; x<1.0f / factor; x += 0.01f) { glVertex2f(x*factor, k2*x*x*factor); } glEnd(); //画反比例函数:f(x)=1/x glLineWidth(0.8); glBegin(GL_LINE_STRIP); glColor3f(0.4, 0.0, 0.5); for (x = -1.0f / factor; x<1.0f / factor; x += 0.01f) { glVertex2f(x*factor, 1 / x*factor); } glEnd(); glFlush(); //刷新缓存区 } //键盘控制图形 void mykeys(int key, int x, int y) { if (key == GLUT_KEY_UP) //上下方向键控制正弦函数的参数 k1 = 2 * k1; if (key == GLUT_KEY_DOWN) k1 = 0.5f*k1; if (key == GLUT_KEY_RIGHT) //左右方向键控制二次函数的参数 k2 += 0.01; if (key == GLUT_KEY_LEFT) k2 -= 0.01; cout << "当前的正弦函数的k1值为" << k1 << endl; //实时监测参数值 cout << "当前的二次函数的k2值为" << k2 << endl; cout << "========" << endl; glutPostRedisplay(); //手动调用此函数重新绘图 }