https://wenku.baidu.com/view/28cd5ebfaf1ffc4fff47accf.html 摘自
一安装包:
codeblocks 安装32位版本
glew
freeglut 或者glut
二安装步骤:
1.先安装codeblocks 并且汉化 默认路径
2.glut包 glut.dll glut32.dll 复制到c:\windows\sysWOW64 目录下 (以下用~sysWOW64表示) (动态链接库 存放目录)
glut.h 到MinGW\include\GL (头文件存放目录)
glut.lib glut32.lib 到MinGW\lib
3.freeglut包 可用此步骤替换步骤2
删除GLUT文件从以上目录删除
32位的freeglut.dll 到~sysWOW64\
libfreeglut.a libfreeglut_static.a 到\MinGW\lib\ 下面
freeglut\include\GL\下的头文件, 到MinGW\include\GL
4.glew包 glew32.dll 到~sysWOW64
glew.h 到 MinGW\include\GL
glew32.lib glew32s.lib 到MinGW\lib
三 配置codeblocks
链接库添加 freeglut winmm gdi32 opengl32 顺序不能变
如果使用的freeglut 则添加空项目
四测试代码
#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;
GLfloat k3 = 1.0f;
GLfloat k4 = 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(k3*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*k4);
}
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 <<"函数表达式为:y=sin("<<k1<<"* x);"<< endl; //实时监测参数值
*/
switch(key)//上下控制正弦;左右控制二次函数;f1 f2控制余弦;f3 f4控制反比例函数
{
case GLUT_KEY_UP:
k1 = 2 * k1;
cout << "正弦函数系数为" << k1 <<"函数表达式为:y=sin("<<k1<<"* x);"<< endl;
cout<<"窗口中的绿色线条为函数图象"<<endl;
cout<<"##########################"<<endl;
cout<<endl<<endl<<endl;
break;
case GLUT_KEY_DOWN:
k1 = 0.5f*k1;
cout << "正弦函数系数为" << k1 <<"函数表达式为:y=sin("<<k1<<"* x);"<< endl;
cout<<"窗口中的绿色线条为函数图象"<<endl;
cout<<"##########################"<<endl;
cout<<endl<<endl<<endl;
break;
case GLUT_KEY_RIGHT:
k2 += 0.01;
cout << "幂函数系数为" << k2 <<"函数表达式为:y=("<<k2<<"* x^2);"<< endl;
cout<<"窗口中的蓝色线条为函数图象"<<endl;
cout<<"##########################"<<endl;
cout<<endl<<endl<<endl;
break;
case GLUT_KEY_LEFT:
k2 -= 0.01;
cout << "幂函数系数为" << k2 <<"函数表达式为:y=("<<k2<<"* x^2);"<< endl;
cout<<"窗口中的蓝色线条为函数图象"<<endl;
cout<<"##########################"<<endl;
cout<<endl<<endl<<endl;
break;
case GLUT_KEY_F1:
k3 = 2 * k3;
cout << "余弦函数系数为" << k3 <<"函数表达式为:y=cos("<<k3<<"* x);"<< endl;
cout<<"窗口中的红色线条为函数图象"<<endl;
cout<<"##########################"<<endl;
cout<<endl<<endl<<endl;
break;
case GLUT_KEY_F2:
k3 = 0.5f*k3;
cout << "余弦函数系数为" << k3 <<"函数表达式为:y=cos("<<k3<<"* x);"<< endl;
cout<<"窗口中的红色线条为函数图象"<<endl;
cout<<"##########################"<<endl;
cout<<endl<<endl<<endl;
break;
case GLUT_KEY_F3:
k4 += 0.01;
cout << "反比例函数系数为" << k4 <<"函数表达式为:y=1/("<<k4<<"* x);"<< endl;
cout<<"窗口中的紫色线条为函数图象"<<endl;
cout<<"##########################"<<endl;
cout<<endl<<endl<<endl;
break;
case GLUT_KEY_F4:
k4 -= 0.01;
cout << "反比例函数系数为" << k4 <<"函数表达式为:y=1/("<<k4<<"* x);"<< endl;
cout<<"窗口中的紫色线条为函数图象"<<endl;
cout<<"##########################"<<endl;
cout<<endl<<endl<<endl;
break;
default:break;
}
glutPostRedisplay(); //手动调用此函数重新绘图
}