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();				//手动调用此函数重新绘图
}

 

posted on 2020-11-16 08:34  学习记录园  阅读(160)  评论(0编辑  收藏  举报