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

 

posted on 2020-12-28 14:43  学习记录园  阅读(121)  评论(0编辑  收藏  举报