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. [TroubleShootting]Zabbix数据采集出现断点的问题

    背景 最近发现公司的Zabbix监控大屏上的监控图经常出现数据断点的现象,主要集中在一些自定义的监控项数据上,如下图: 原因 查看Zabbix Server日志以及zabbix官方手册后,分析可能原因 ...

  2. Mybatis入门及第一个Mybatis程序

    Mybatis笔记整理 所需要的基础知识 JDBC Mysql Java基础 Maven Junit 框架:是有配置文件的.最好的方式:看官网文档 1.简介 1.1.什么是MyBatis 简介 什么是 ...

  3. CentOS6.5&7更改开机启动时的CentOS标题

    #现有CentOS6.5改以下配置文件 sed -i 's/CentOS/DntOS/g' /etc/centos-release sed -i 's/CentOS/DntOS/g' /etc/iss ...

  4. 一个神奇的bug:OOM?优雅终止线程?系统内存占用较高?

    摘要:该项目是DAYU平台的数据开发(DLF),数据开发中一个重要的功能就是ETL(数据清洗).ETL由源端到目的端,中间的业务逻辑一般由用户自己编写的SQL模板实现,velocity是其中涉及的一种 ...

  5. 上传视频到七牛云Django后端实现

    1.上传视频到七牛云django端实现 1.1 获取七牛云秘钥 https://portal.qiniu.com/user/key 1.2 在syl/settings.py中配置七牛云上传 参考官方 ...

  6. SAP调用RestfulApi接口POST数据到外部系统

    作者:明光烁亮 出处:http://www.cnblogs.com/hezhongxun/ 微信号:HEme922 欢迎加好友一起交流SAP! 视频资料共享. 本文版权归作者和博客园共有,欢迎转载,但 ...

  7. .Net Core JWT 动态设置接口与权限

    通过上一篇.Net Core官方的 JWT 授权验证学习到了JWT的授权.可以发现一个问题,就是如果每个接口可以使用的角色都是写死的,这样如果有所修改会非常麻烦,虽然用policy可以一定程度上缓解, ...

  8. moviepy音视频剪辑:视频半自动追踪人脸打马赛克

    一.引言 在<moviepy1.03音视频剪辑:使用manual_tracking和headblur实现追踪人脸打马赛克>介绍了使用手动跟踪跟踪人脸移动轨迹和使用headblur对人脸进行 ...

  9. 第14.5节 利用浏览器获取的http信息构造Python网页访问的http请求头

    一. 引言 在<第14.3节 使用google浏览器获取网站访问的http信息>和<第14.4节 使用IE浏览器获取网站访问的http信息>中介绍了使用Google浏览器和IE ...

  10. Android基础02

    初识安卓的另一个重要的组件---广播. 1.广播的分类 标准广播:是一种完全异步执行的广播,在广播发出之后,所有的广播 接收器几乎都会在同一时刻接收到这条广播消息,因此它们之间没有任何先后顺序可言.这 ...