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

codeblocks opengl glew freeglut 2020.11.15的更多相关文章

  1. 基于glew,freeglut的imshow

    OpenGL显示图片,这篇博客使用glew + freeglut + gdal来实现imshow. 主要修改: 使用BGR而不是RGB,保持和opencv行为一致 纯C,去掉C++相关的 去掉GDAL ...

  2. OpenGL学习日志(2020.4之前)

    咳咳,原本这个日志是本机上随便写的一些记录,也没怎么注意可读性和格式,有用信息密度很小,所以实用价值并不大.暂时由于不可抗因素得先鸽一段落了... 后续的日志会升格为模块化的学习记录,(应该)将会有很 ...

  3. Linux编译内核 Ubuntu18.04 -2020.11.04

    Linux编译内核 Ubuntu18.04 -2020.11.04 关闭虚拟机并备份 首先关闭虚拟机,其次直接找到.vmdk所在目录,并压缩该目录实现备份 下载内核源码 Linux内核官网:https ...

  4. Goland 2020.2.x 激活码永久破解教程 (最新Goland激活码!2020.11.26亲测可用!)

    在2020.11.26 Goland的用户们又迎来了一次更新,这就导致很多软件打开时候就提示Goland激活码已经失效,码小辫第一时间给各位分享了关于最新Goland激活破解教程! goland已经更 ...

  5. Sprint1(第二天11.15)

    Sprint1(第二天11.15) Sprint1第一阶段 1.类名:软件工程-第一阶段 2.时间:11.14-11.23 3.选题内容:web版-餐厅到店点餐系统 4.团队博客地址: http:// ...

  6. Notes of Daily Scrum Meeting(11.15)

    Notes of Daily Scrum Meeting(11.15) 今天周六我们的主要工作是把这周落下的一些工作补回来,这是写程序的最后阶段,准备进入测试阶段了,所以之前的工作 要补齐,今天大家的 ...

  7. 11.15 Daily Scrum

    今天是假期回来的第一个周末,也是我们团队的又一次进度汇总总结和调试工作开展,鉴于一周以来大家的工作有了很大的成果,所以,本次召开的会议主旨在于解决一些开发方面的细节问题,达成共识,为日后进一步的功能方 ...

  8. codeblocks opengl的配置

    codeblocks opengl的配置 GLUT 3.7 下载地址:http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip ...

  9. 2017.11.15 String、StringBuffer、StringBuilder的比较(todo)

    参考来自:http://blog.csdn.net/jeffleo/article/details/52194433 1.速度 一般来说,三者的速度是:StringBuilder > Strin ...

随机推荐

  1. mysql undo+redo+binlog

    rt 数据库事务开始之前,会将要修改的记录存放到UNdo日志里,当事务回滚时或数据库崩溃时,可以利用undo日志撤销未提交事务对数据库产生的影响. 逻辑日志,记录一个过程,提交后不会删除.delete ...

  2. SpringIOC循环依赖

    目录 1. 什么是循环依赖 注意: 这⾥不是函数的循环调⽤,是对象的相互依赖关系. 循环调⽤其实就是⼀个死循环,除⾮有终结 条件. 2. 循环依赖处理机制 2.1 演示场景: 2.2 处理机制简图 总 ...

  3. C#(三)基础篇—方法,递归,条件分支,循环,三元操作符

    C# 本随笔为个人复习巩固知识用,多从书上总结与理解得来,如有错误麻烦指正 2020-12-03 1.方法 static void Main(string[] args) { float Sum(fl ...

  4. keil/MDK代码配色

    个人配色方案,仅供参考.

  5. 使用pip安装的Python扩展模块是从哪里下载的?

    对于初学者才开始使用Python安装扩展模块时,发现只要输入扩展模块名就可以安装,无需先下载再安装,不免疑惑那些要安装的软件是在哪里下载的?是否可以从别的地方下载? 这个问题答案如下: pip安装第三 ...

  6. Hadoop 中HDFS、MapReduce体系结构

    在网络环境方面,作为分布式系统,Hadoop基于TCP/IP进行节点间的通信和传输. 在数据传输方面,广泛应用HTTP实现. 在监控.通知方面,Hadoop等分布式大数据软件则广泛使用异步消息队列等机 ...

  7. 最近有安装了一次hadoop集群,NameNode启动失败,及原因

    最近有安装了一次hadoop集群,NameNode启动失败,查看日志,找到以下原因: 遇到的异常1: org.apache.hadoop.hdfs.server.common.Inconsistent ...

  8. STL——容器(Map & multimap)的查找

    map.find(key);   //查找键key是否存在,若存在,返回该键的元素的迭代器:若不存在,返回map.end(); map.count(key);   //返回容器中键值为key的对组个数 ...

  9. 关于C++的异常抛出

    在接触 throw 之前,我们只知道可以通过函数的返回值来获取和定位错误,比如通过 return 来层层返回是一种方法,但如果牵扯到多层函数调用,那么通过 return 来返回错误显得过于拖沓,这时就 ...

  10. Pycharm github登录 Invalid authentication data. Connection refused.

    在github.com前加上 https:// 注意登录时使用的是用户名不是邮箱