«

HNUST-计算机图形/图像期末复习

ZealSinger 发布于 阅读:25 期末复习


参考内容

教材

2023 hnust 湖南科技大学 大四上 计算机图形图像技术 课程 期末考试 复习资料_湖南科技大学计算机图形学-CSDN博客

理论基础题解析.pdf

openGL习题.pdf

openCV习题.pdf

60道复习题

历年样卷

考试题型(源自CSDN)

第一章:计算机图形学概述

相关定义

计算机图像学定义

研究怎么利用计算机表示,生成,处理和显示图形的原理,算法,方法和技术的一门学科,计算机图形学=造型+绘制


 

图形的构成要素

图形由 几何要素 和 非集合要素 两种要素构成

  1. 几何要素:刻画形状的点,线,面,体等

  2. 非几何要素:反映物体表面属性和材质的灰度,颜色等

例如: 方程x+y=1确定的图形由满足这个方程并且具有一定颜色信息的点构成 (几何要素:满足x+y=1的点 非几何要素:具有一定的颜色信息)


 

图形的表示方法

一般有 参数法 和 点阵法 两种表示图形的方法

  1. 参数法:用图形的形状参数 和 属性参数 来表示图形,用参数法描述的图形叫做参数图或者图形

    • 形状参数:是指描述图形的方程;分析表达式的系数;线段的端点坐标;多边形的顶点坐标等

    • 属性参数:包括颜色和线性

  2. 点阵法通过列出图形中所有的点来表示图形,用点阵法描述的图形叫做像素图或者图像。点阵法强调的是“图形由哪些点组成,每个点具有怎样的颜色”


 

计算机图形学的研究内容

  1. 图形的输入:开发和利用图形输入设备以及相关软件把图形输入到计算机中,以便于进行各种处理

  2. 图形的处理:对图形进行变换(例如几何变换,投影变换 )和运算(例如图形的交,并,差运算)等处理

  3. 图形的生成和输出:将图形的特定表示形式转换为图形输出系统便于接受的表示形式,并将图形在显示器或者打印机等输出设备上输出

计算机图形学与相关学科的关系

主要探讨计算机图形学,图形处理,计算机和,计算机视觉和模式识别这几个学科之间的关系,一张图

image-20251125154644888

计算机图形学的应用领域

OpenGL基础

OpenGL(Open Graphics Library)的核心目标是渲染图形,即根据几何数据(点、线、面)和非几何数据(颜色、材质、纹理),在屏幕上绘制出 2D 或 3D 图像。它是一个底层的图形 API,提供了操作图形硬件的接口。专注于图形渲染,将几何数据转换为屏幕上的像素

了解定义是为了能和OpenCV的作用进行区分,方便理解而已,应该不存在考点的说法

基础语法

学习常规基础语法之前,先来聊聊OpenGL整个库的组成部分,有助于了解命名规范和记忆函数作用

基于三大组成部分的命名规范

三大组成部分决定了函数的前缀,也决定了函数放在哪里,同时对于函数的作用也有一定的提示性。例如你看到glxxxx函数就立马能反应属于核心函数且与图形硬件交互有关


 

同时,基于三大组成部分,每个组成部分内肯定会定义一些常量,这些常量的命名也适合所属部分相关


 

OpenGL的函数后缀的设计也是有一定规范的,你可以看到很多函数名都是类似的3f3fv2d这种数字+字母的形式为函数名的后缀


当然,也存在一部分特殊的命名,例如GLint, GLfloat, GLdouble, GLubyte 等,确保跨平台兼容性。

程序基本框架

如下代码,是运行一个最基本的OpenGL所需要的代码(教材P5),其运行后的效果是

一个 200×200 的窗口,标题是「First OpenGL!」:

#include<GL/freeglut.h>

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

当你需要某种图元类型的绘画的时候,统一采用如下的格式/框架

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();

image-20251125213232238

image-20251125213756177

 

颜色与材质的设置

几何变换