1. 计算机图形学的定义

ISO:研究通过计算机将数据转换为图形,并在专门显示设备上显示的原理、方法和技术的学科

IEEE:利用计算机产生图形图像的艺术或科学

国内:利用计算机研究图形的表示、生成、处理和显示的学科

汇总:研究通过计算机将场景对象转换为图形进行显示为图像的一门学科

  • 表示/建模:如何用图形方式表示真实或虚拟世界中的场景对象
  • 显示/绘制:将数字几何模型转换为直观形象的图像形式

图形和图像的区别

图形学相关学科

2. 计算机图形学的核心目标

核心目标:创建有效的视觉交流,帮助人脑从图形图像的角度理解事物本质

视觉交流

  1. 观察->问题/信息:通过观察,明确问题或要传达的信息
  2. 问题/信息->几何:通过建模表达问题,使问题可以用几何模型抽象地表示
  3. 几何->图像:将问题或信息可视化

应用领域

  • 计算机辅助设计与制造(CAD/CAM):工程和建筑设计,帮助创建精确的2D和3D模型
  • 科学计算可视化(visualization):将复杂的数据和模型以可视化形式呈现,使科学研究和分析更加直观
  • 虚拟现实(Virtual Reality):提供沉浸式体验,广泛应用于游戏、教育和模拟训练中
  • 动画(Animation):创造动态视觉内容,涵盖电影、游戏和广告等多个领域

3. OpenGL

3.1 介绍

OpenGL(Open Graphics Library)被认为是一个应用程序编程接口(API),包含了一系列可以操纵图形和图像的函数,其严格规定了每个函数该如何执行,以及他们的输入输出值

实际上,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范,具体的实现是由驱动开发商针对特定显卡实现的

3.2 模式

立即渲染模式(Immediate mode):允许程序直接调用绘制命令,并立即渲染图形,这种方式易于使用,但效率较低,因为每个绘制调用都会与GPU通信

核心模式(Core-profile):推荐使用着色器和顶点缓冲对象来提高性能和灵活性,提供了更多的灵活性,更高的效率,更重要的是可以更深入的理解图形编程

3.3 状态机

状态机(State Machine):OpenGL依赖于一系列变量来指示运行

上下文(Context):包含OpenGL所有状态和资源的环境,每个上下文是独立的,通常在不同的窗口或线程中创建,并且使用当前的OpenGL上下文来渲染

OpenGL实现的本质
  • 设置选项:使用状态设置函数改变上下文指示绘图
  • 操作缓冲:使用状态使用函数根据上下文执行操作
  • 渲染图形:使用状态渲染函数根据上下文进行渲染

3.4 对象

OpenGL库是用C语言写的,同时也支持多种语言的派生,但其内核仍是一个C库

OpenGL对象(object):是一些选项的集合,代表OpenGL状态的一个子集

1
2
3
4
5
struct object_name {
float option1;
int option2;
char[] name;
};

OpenGL结构体(struct):OpenGL上下文被当做一个大的结构体,通过库中的函数来设置结构体中的对象,从而改变OpenGL状态

1
2
3
4
5
struct OpenGL_Context {
...
object* object_Window_Target;
...
};

3.5 GLAD和GLFW

GLAD:由于OpenGL的功能在不同平台和驱动中可能不同,开发者需要在运行时获取函数地址并将其保存在一个函数指针中供以后使用,非常复杂且繁琐。而GLAD是一个OpenGL加载库,可以帮助开发者动态加载所需的OpenGL函数,且不必担心兼容性问题

GLFW:是一个跨平台的窗口管理库,提供了一些渲染物体所需的最低限度的接口,用于创建OpenGL上下文、定义窗口参数以及处理用户输入,使得开发者可以专注于图形渲染,而不用处理底层平台差异

配置参考

3.6 特点

  • 应用广泛:无论是在PC机上,还是在工作站上,甚至在大型机和超级计算机上都能表现出它的高性能和强大威力
  • 跨平台性:OpenGL能够在几乎所有的主流操作系统上运行
  • 可扩展性:可以利用API进行功能扩充
  • 绘制专一性:OpenGL只提供绘制操作访问,而没有提供建立窗口、接受用户输入等机制,它要求所运行环境中的窗口系统提供这些机制、
  • 网络透明性:OpenGL允许一个运行在工作站上的进程在本机或通过网络在远程工作站上显示图形