HNUST-计算机图形/图像期末复习
ZealSinger 发布于 阅读:26 期末复习
教材
考试题型(源自CSDN)
-
简述题(10分×4题,共40分)
-
第1章的基本内容
-
三维观察流水线中的基本概念与理解
-
三维场景真实感绘制中的基本概念与理解
-
图像增强中的基本概念与理解
-
形态学操作,包括膨胀,腐蚀,开,闭等操作中的基本概念与理解
-
-
计算题(共10分)
-
Bézier样条的计算表达
-
-
编程题(共30分)
-
OpenCV基本函数的调用
-
利用OpenGL编写核心代码,包括平移,旋转,缩放及坐标系之间的变换等所有其它的基本变换。
-
利用OpenCV编写核心代码,内容包括图像增强,图像分析等
-
-
问答题(共20分 老师没讲)
第一章和第十章内容,考得宽泛,无需写具体知识点,但回答尽量多写字数,预估送分题,例如:
计算机图形学和数字图像处理这两门学科的关系 图像处理有哪些细分领域与自己有什么关系
第一章:计算机图形学概述
相关定义
计算机图像学定义
研究怎么利用计算机表示,生成,处理和显示图形的原理,算法,方法和技术的一门学科,计算机图形学=造型+绘制
图形的构成要素
图形由 几何要素 和 非集合要素 两种要素构成
-
几何要素:刻画形状的点,线,面,体等
-
非几何要素:反映物体表面属性和材质的灰度,颜色等
例如: 方程x+y=1确定的图形由满足这个方程并且具有一定颜色信息的点构成 (几何要素:满足x+y=1的点 非几何要素:具有一定的颜色信息)
图形的表示方法
一般有 参数法 和 点阵法 两种表示图形的方法
-
参数法:用图形的形状参数 和 属性参数 来表示图形,用参数法描述的图形叫做参数图或者图形
-
形状参数:是指描述图形的方程;分析表达式的系数;线段的端点坐标;多边形的顶点坐标等
-
属性参数:包括颜色和线性
-
-
点阵法:通过列出图形中所有的点来表示图形,用点阵法描述的图形叫做像素图或者图像。点阵法强调的是“图形由哪些点组成,每个点具有怎样的颜色”
计算机图形学的研究内容
-
图形的输入:开发和利用图形输入设备以及相关软件把图形输入到计算机中,以便于进行各种处理
-
图形的处理:对图形进行变换(例如几何变换,投影变换 )和运算(例如图形的交,并,差运算)等处理
-
图形的生成和输出:将图形的特定表示形式转换为图形输出系统便于接受的表示形式,并将图形在显示器或者打印机等输出设备上输出
计算机图形学与相关学科的关系
主要探讨计算机图形学,图形处理,计算机和,计算机视觉和模式识别这几个学科之间的关系,一张图

计算机图形学的应用领域
-
计算机辅助设计(CAD)与制造 (这个是计算机图形学在工业界最成功,最重要的领域)
-
科学计算可视化
-
虚拟现实(VR)
-
计算机艺术
-
计算机动画(CG)
-
图形用户接口(GUI)
OpenGL基础
OpenGL(Open Graphics Library)的核心目标是渲染图形,即根据几何数据(点、线、面)和非几何数据(颜色、材质、纹理),在屏幕上绘制出 2D 或 3D 图像。它是一个底层的图形 API,提供了操作图形硬件的接口。专注于图形渲染,将几何数据转换为屏幕上的像素
了解定义是为了能和OpenCV的作用进行区分,方便理解而已,应该不存在考点的说法
基础语法
学习常规基础语法之前,先来聊聊OpenGL整个库的组成部分,有助于了解命名规范和记忆函数作用
基于三大组成部分的命名规范
-
gl: 核心函数,直接与图形硬件交互,如
glClearColor,glVertex3f。 -
glu: 实用函数库(OpenGL Utility Library),封装了一些常用操作,如
gluOrtho2D(正交投影)、gluPerspective(透视投影)。 -
glut: 实用工具包(OpenGL Utility Toolkit),用于窗口管理、事件处理、简单的 3D 模型绘制,如
glutInit,glutCreateWindow,glutDisplayFunc。
三大组成部分决定了函数的前缀,也决定了函数放在哪里,同时对于函数的作用也有一定的提示性。例如你看到glxxxx函数就立马能反应属于核心函数且与图形硬件交互有关
同时,基于三大组成部分,每个组成部分内肯定会定义一些常量,这些常量的命名也适合所属部分相关
-
GL_: 核心常量,如
GL_COLOR_BUFFER_BIT,GL_LINE_LOOP。 -
GLU_: 实用库常量。
-
GLUT_: 工具包常量,如
GLUT_RGB,GLUT_DOUBLE。
OpenGL的函数后缀的设计也是有一定规范的,你可以看到很多函数名都是类似的3f,3fv,2d这种数字+字母的形式为函数名的后缀
-
数字:表示参数个数,如
glVertex2f(2 个参数)、glVertex3f(3 个参数)。 -
字母:表示参数类型,如
f(float)、d(double)、i(int)、v(vector,向量)。示例:
-
glVertex3f(1.0f, 0.0f, 0.0f):3 个 float 参数,表示一个 3D 点。 -
glColor3fv(colors):一个包含三个元素的 float 向量(数组),表示 RGB 颜色。
-
当然,也存在一部分特殊的命名,例如GLint, GLfloat, GLdouble, GLubyte 等,确保跨平台兼容性。
程序基本框架
如下代码,是运行一个最基本的OpenGL所需要的代码(教材P5),其运行后的效果是
一个 200×200 的窗口,标题是「First OpenGL!」:
-
背景是默认的黑色;
-
窗口中间会显示一个白色矩形(因为
glColor默认是白色(1,1,1,1)),矩形的范围是(-0.8,-0.6)到(0.8,0.6)(对应 OpenGL 默认的「标准化设备坐标」,范围是[-1,1])。
void Paint() // 对象的描述
{
glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓冲区 GL_COLOR_BUFFER_BIT即代表颜色缓冲区
glRectf(-0.8,-0.6,0.8,0.6); // 定义矩形 (-0.8,-0.6)~(0.8,0.6)
glFlush(); // 强制 OpenGL 命令序列在有限的时间内完成执行
}
int main(int argc,char *argv[])
{
glutInit(&argc,argv); // 初始化 GLUT,记录 main()的参数,理解不了的直接死记硬背,入参就是main函数的入参,只不过第一个argc参数需要取地址
// 设置程序窗口的显示模式(GLUT_SINGLE表示设置为单缓存,GLUT_RGBA表示设置为RGBA颜色模式,除此之外还有GLUT_INDEX索引颜色模型,CLUT_DOUBLE双线是缓冲区,GLUT_DEPTH深度缓存),glutInitDisplayMode的默认模式是GLUT_SINGLE | GLUT_RGBA即RGBA颜色方式的单缓冲区
// 需要注意的是 RGBA的颜色参数其实有四个(red,green,blue,alpha)前三个即代表红绿蓝的占比,最后一个alpha代表透明度,默认为1,代表完全不透明,四个参数的取值都是[0,1]
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutInitWindowSize(200,200); // 初始化窗口位置。指定程序窗口在屏幕上的大小
glutCreateWindow("First OpenGL!"); // 创建程序窗口,指定窗口标题
glutDisplayFunc(Paint); // 指定场景绘制循环函数,必需
glutMainLoop(); // 开始循环执行 OpenGL 命令
}
基本图元绘制
常见图元类型,对应教材P26
-
GL_POINTS:点
-
GL_LINES:线段(每两个顶点组成一条)
-
GL_LINE_STRIP:折线(顶点依次相连)
-
GL_LINE_LOOP:闭合折线
-
GL_TRIANGLES:三角形(每三个顶点一个)
-
GL_TRIANGLE_STRPI:三角形带
-
GL_TRIANGLE_FAN:三角形扇
-
GL_QUADS:四边形
-
GL_POLYGON:多边形
当你需要某种图元类型的绘画的时候,统一采用如下的格式/框架
glBegin(图元类型);
相关参数
glEnd();
例如
// 绘制 4 个独立的点,分别位于坐标 (-1,1)、(1,1)、(1,-1)、(-1,-1) 处
glBegin(GL_POINTS); // 绘点
// glVertex2f按照我们上面的命名规范可以拆分理解
// gl(核心库函数)+Vertex(英文翻译为顶点)+2f(代表接收两个float类型的参数)
// 所以综合理解就是 核心库函数中的 利用两个float入参 可以绘画一个顶点 的方法
glVertex2f(-1, 1); // 左上点
glVertex2f(1, 1); // 右上点
glVertex2f(1, -1); // 右下点
glVertex2f(-1, -1); // 左下点
glEnd();
// 每两个顶点组成一条线段,这里将绘制两条交叉的线段,形成一个 "X" 形,一条连接 (-2,2) 到 (2,-2),另一条连接 (-2,-2) 到 (2,2)。
glBegin(GL_LINES); // 线段
// 第一条线段
glVertex2f(-2, 2);
glVertex2f(2, -2);
// 第二条线段
glVertex2f(-2, -2);
glVertex2f(2, 2);
glEnd();
//顶点依次连接形成连续的折线,从 (-2,0) 到 (0,2),再到 (2,0),最后到 (0,-2),形成一个不闭合的菱形轮廓。
glBegin(GL_LINE_STRIP); //折线(顶点依次相连)
glVertex2f(-2, 0);
glVertex2f(0, 2);
glVertex2f(2, 0);
glVertex2f(0, -2);
glEnd();
// 顶点依次连接形成折线,并且最后一个顶点会与第一个顶点连接形成闭合图形,这里将形成一个五边形轮廓
glBegin(GL_LINE_LOOP); // 闭合折线
glVertex2f(-2, 1);
glVertex2f(0, 2);
glVertex2f(2, 1);
glVertex2f(1, -1);
glVertex2f(-1, -1);
glEnd();
// 每三个顶点组成一个独立的三角形,这里将绘制两个三角形,它们共享一个顶点 (0,2),形成一个类似蝴蝶翅膀的形状
glBegin(GL_TRIANGLES); // 三角形
// 第一个三角形
glVertex2f(-2, 1);
glVertex2f(0, 2);
glVertex2f(-1, -1);
// 第二个三角形
glVertex2f(0, 2);
glVertex2f(2, 1);
glVertex2f(1, -1);
glEnd();
//从第一个顶点开始,每新增一个顶点就与前两个顶点组成一个新三角形,形成连续相连的三角形带,这里会形成一个波浪状的条带图形。
glBegin(GL_TRIANGLE_STRIP); //三角形带 下面有对应的图
glVertex2f(-2, -1);
glVertex2f(-1, 1);
glVertex2f(0, -1);
glVertex2f(1, 1);
glVertex2f(2, -1);
glEnd();
// 以第一个顶点为中心,后续每个顶点与前一个顶点及中心点组成三角形,形成类似扇形的形状,这里会形成一个六边形。
glBegin(GL_TRIANGLE_FAN); // 三角形扇 下面有对应的图
glVertex2f(0, 0); // 中心点
glVertex2f(2, 0);
glVertex2f(1, 2);
glVertex2f(-1, 2);
glVertex2f(-2, 0);
glVertex2f(-1, -2);
glVertex2f(1, -2);
glVertex2f(2, 0); // 闭合图形
glEnd();
// 所有顶点依次连接形成一个闭合的多边形,这里将绘制一个六边形,顶点按顺时针方向排列形成规则的六边形形状。
glBegin(GL_POLYGON);
glVertex2f(-1, 2);
glVertex2f(1, 2);
glVertex2f(2, 0);
glVertex2f(1, -2);
glVertex2f(-1, -2);
glVertex2f(-2, 0);
glEnd();


颜色与材质的设置
-
设置颜色:
glColor3f(r, g, b)(RGB)或glColor4f(r, g, b, a)(RGBA,a 为透明度)。 -
材质属性:3D 绘图中使用,如
glMaterialfv设置材质的漫反射、镜面反射等属性。
几何变换
-
平移:
glTranslatef(x, y, z) -
旋转:
glRotatef(angle, x, y, z)(angle 为角度,x,y,z 为旋转轴) -
缩放:
文章标题:HNUST-计算机图形/图像期末复习
文章链接:https://www.zealsinger.xyz/?post=43
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自ZealSinger !
如果觉得文章对您有用,请随意打赏。
您的支持是我们继续创作的动力!
微信扫一扫
支付宝扫一扫