64 计算机图形学入门(1)——OpenGL环境配置与图形流水线(图像管线)
0 引言
最近想学一下计算机图形学方面的知识,原因如下。目前本人接触了数字图像处理(opencv)以及点云处理(PCL)方面的知识,对从图像和点云中提取特征信息,并将特征转化为底层/中层语义信息有了一定经验。另一方面,通过组内交流,本人对计算机视觉中从图像/点云获取高层语义信息也有了一定的了解。但是,对于如何从语义到图形/图像这个过程我了解不多,而计算机图形学正是研究解决这个问题的学科。从OpenGL图形流水线开始学习计算机图形学是一条相当不错的途径,这便是本文的目的所在。
1 学习资料整理
(1)课程学习资料,北京林业大学 杨刚副教授,《图形编程技术》.
没想到能在中国大学MOOC上听到这么好的课,真的是特别的好。杨老师立足于编程,从OpenGL编程环境配置、图形流水线、freeglut中的各个具体的函数以及背后的运行机制、线性几何变换等一路做出了详细的分析,甚至还讲解了GPU/显卡的发展以及内部的图形流水线硬件电路,深入浅出、由表及里,令人如沐春风!
(2)教材,网站之类的
(2.1)直接学习Shader着色器编程模式的有《OpenGL超级宝典》
(2.2)《OpenGL编程指南》,即红宝书
(2.3)www.learnopengl.com (编程环境: glfw + glad)
(2.4)ogldev.atspace.co.uk (编程环境: freeglut + glew)
(2.5)https://open.gl/ 一个老外写的介绍opengl的网站,写得通俗易懂,特别好
(2.6)https://learnopengl.com/ 另外一个老外写的介绍opengl的网站,也写得非常好
(2.7)https://www.learnopengles.com/tag/aspect-ratio/ 另外一个老外写的介绍 opengl es的网站,写得也不错
2 配置开发环境
freeglut 是 glut的替代物,并且在glut停止更新之后,保持与OpenGL标准的同步更新。与glut相比,freeglut更为强大。下面是一个cmake + vs2015编译freeglut的链接,配置起来很简单。
https://blog.csdn.net/wh43023/article/details/78453255
freeglut和glew的配置问题。
https://blog.csdn.net/xiaoxiaoyusheng2012/article/details/43925441
3 图形流水线
图像在电脑屏幕上显示出来分为三个步骤:1、建模; 2、渲染; 3、运动。 OpenGL图形流水线主要解决第二个阶段的问题。
(1)OpenGL图形绘制管线

OpenGL应当被理解为状态机,即OpenGL 编程只是改变目前图形绘制管线中各个阶段的状态参数,并不改变整个绘制过程。至少在固定管线或者不对绘制状态进行操作时是这样的。
(2)OpenGL 图元绘制
// 绘制一个红色的三角形
GLfloat x0, x1, x2;
GLfloat y0, y1, y2;
GLfloat z0, z1, z2;
glBegin(GL_TRIANGLES);
glColor3f(1.0, 0.0, 0.0);
glVertex3f(x0, y0, z0);
glVertex3f(x1, y1, z1);
glVertex3f(x2, y2, z2);
glEnd(); // 绘制一个顶点颜色不同的三角形
glBegin(GL_TRIANGLES);
glColor3f(c0);
glVertex3f(v0);
glColor3f(c1);
glVertex3f(v1);
glColor3f(c2);
glVertex3f(v2);
glEnd();
(3)freeglut编程模式
(3.1)程序框架
main()
{
设置显示模式;
初始化窗口;
创建窗口;
设置一系列回调函数;
启动主循环;
}
其中,程序员主要编写各种回调函数,来执行对外部设备消息的响应。
另外,调用glutIdleFunc(display)启动重绘。为了提高运行效率,通常采用在接收到外部设备输入时,再调用glutPostRedisplay发出重绘消息,进而调用重绘函数。
(3.2)OpenGL坐标系统

(4)MFC中使用glut
int argc = ;
char* argv[] = { "MFC_GLUT" };
glutInit(&argc, argv);
4 名词解释
(1)field of view : 找了一张漂亮的图说明一下
The field of view (in the gluPerspective call) is the angle in degrees between a plane which passes through the camera position and the top of your screen and another plane which passes through the camera position and the bottom of your screen.

(2)正交投影:Views of Orthographic Projection
https://civilseek.com/orthographic-projection-drawing/
正交投影在绘制从远处观察不产生任何透视缩短的特定物体时非常有用。
GLFrustum::SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin, GLfloat zMax);
(3)透视投影:perspective projection
GLFrustum::SetPerspective(float fAngle, float fAspect, float fNear, float fFar);
透视投影表示从一个顶点方向看去的视场角度 fAngle(degree), 宽度和高度的比值 fAspect,从近剪切面到远剪切面的距离
64 计算机图形学入门(1)——OpenGL环境配置与图形流水线(图像管线)的更多相关文章
- PHP入门及服务环境配置(Nginx+PHP)
PHP入门及服务环境配置(Nginx+PHP) PHP入门 PHP维基百科: PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一 ...
- 我的新书《计算机图形学基础(OpenGL版)》
我的新书<计算机图形学基础(OpenGL版)>今年6月份在清华大学出版社出版了!新书与原在机械工业出版社出的<计算机图形学>相比,主要有以下不同: 1.加重OpenGL的内容, ...
- 图解VC++ opengl环境配置和几个入门样例
VC6下载 http://blog.csdn.net/bcbobo21cn/article/details/44200205 demoproject和glut库下载 http://pan.baidu. ...
- OpenGL: 环境配置和图元的绘制
前言 距离上一篇博客已经过去一个半月了,这段时间过得确实充实,虽然一大段时间泡在图书馆复习,但至少也能学到点东西.跨年晚和元旦一整天,全身心投入图形学小课设的编程,终于实现了老师要求的所有功能,回想起 ...
- RabbitMQ消息队列入门篇(环境配置+Java实例+基础概念)
一.消息队列使用场景或者其好处 消息队列一般是在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量. 在项目启 ...
- Java的入门知识和环境配置
JVM(Java Virtual Machine)Java虚拟机 JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的. JAVA语言非常重要 ...
- VS2010/VS2012/VS2015下openGL环境配置(转)
按:按照下述博文,三个例子均成功. https://blog.csdn.net/so_geili/article/details/51685005 请仔细阅读每一个字. 为了学习<OpenGL超 ...
- PHP入门介绍与环境配置
浏览目录: 一.PHP的背景和优势: 二.PHP原理简介: 三.PHP运行环境配置: 四.编写简单的PHP代码以及测试. 一.PHP的背景和优势 1.1 什么是PHP? PHP是能让你生成动态网页 ...
- 关于MFC OpenGL环境配置的一点总结
复制include时要小心..看vs给你load哪一个..名字一样..东西可不一定一样哦 http://www.cppblog.com/wicbnu/archive/2010/09/30/128123 ...
随机推荐
- WebView中shouldOverrideUrlLoading和onPageStarted方法的区别
WebView中的shouldOverrideUrlLoading和onPageStarted这两个方法就是可以捕获到跳转的url,然后进行一系列的操作,但是他们两到底有什么区别呢? 当点击页面中的链 ...
- The First Scrum Meeting!
第六周会议 情况简述 会议概要:明确需求,确定目标 参与人员:詹晓宇 谢赛金 熊紫仁 徐翠萍 周娟 孙尚煜 讨论时间:2019-10-24 会议地点:六区研讨性教室 具体内容 根据之前做的P ...
- cookie的使用说明
cookie的英文意思是饼干的意思,实质上是键值对组成的字典.就是说你访问某一个网址,服务器给你一个东西,你收到东西,并且贴上了一个标签.下次你访问服务器的时候,请求带有标签.这样服务器给你之后,就会 ...
- mysql 用户权限管理详细
用户管理 mysql>use mysql; 查看 mysql> select host,user,password from user ; 创建 mysql> create user ...
- CPU、内存、磁盘三者的关系
参考:https://blog.csdn.net/weini1111/article/details/70849332 cpu是大脑,计算数据用的. 内存是草稿纸,开着电脑一直都在用里边的数据,如果断 ...
- php打包下载文件
使用前请先开启:查看下php.ini里面的extension=php_zip.dll前面的分号有没有去掉; $zip=new \ZipArchive(); $zifile = 'download/' ...
- (7)C++ 函数2
一.内联函数 通常程序在调用函数时,程序会跳转到另一个地址上,意味着会多花开销.使用内联函数,编译器能够将函数调用替换成函数代码.这样会变得稍快一些 在函数原型的地方使用加了inline的函数定义 # ...
- Windows操作系统架构
用户态 用户态有四类组件,这四类组件都是以进程形式存在的,也就是说,它们都有自己的进程地址空间(其实就是一套页表). 1. System Support Processes 这些是固化的进程,也就是说 ...
- charles使用教程
概述 Charles是目前最强大的http调试工具,在界面和功能上远胜于Fiddler,同时是全平台支持.是收费软件,可以试用15分钟,下面提供了破解方法. 安装破解 https://www.cn ...
- linux 下安装与使用
一 安装 ## 先用wget下载源文件 wget http://download.redis.io/releases/redis-3.2.9.tar.gz ## 我自己建个文件夹 mkdir /usr ...