写点什么

基础篇之图形学

作者:邱学喆
  • 2022-12-03
    广东
  • 本文字数:3292 字

    阅读完需:约 11 分钟

基础篇之图形学

一. 概述

早期看了图形学的相关书籍,对其里面的复杂的线性代数以及各种数学公式被吓怕。结果看完后,啥也没有留下。借此机会,对图形学的系统性学习,对其专业术语概念以及简单的原理进行阐述。

其是基于《计算机图形学基础(OpenGL 版)》,徐文鹏主编,进行系统性梳理总结;


目前主流的显示器上,是采用光栅扫描显示,所有图形的显示都归结为按照图形的描述将显示设备的光栅像素点点亮。为了输出一个像素,需要将该像素的坐标和颜色信息转换成输出设别的相应指令。通俗的理解,其是由各个像素点组成的画面。

二. 二维图形

基本图元显示问题是根据基本图元的描述信息来生产像素组合。基本二维图形图元包括点、线、圆弧、多边形、字体符号和位图等。

2.1 直线生成算法

  • 2.1.1 数值微分法

数值微分法(DDA 法)根据直线地微分方程来绘制直线;

  • 2.1.2 逐点比较法

逐点比较法是在画线过程中,每画一点就与理想直线比较,以决定下一点地走向,以步步逼近地方法点亮最接近直线地一组像素。

  • 2.1.3 Bresenham 画线法

是应用最广泛地直线生成算法,它采用加减与乘 2 运算来实现。

  • 2.1.4 中点画线法

与 Bresenham 画线法类似;

2.2 圆弧绘制算法

  • 2.2.1 基于光栅的整圆绘制算法

整圆的绘制算法由逐点比较法、Bresenham 算法和中点画圆法;

  • 2.2.2 角度离散法

利用已有的直线算法来分段绘制圆弧、椭圆弧。

2.3 区域填充

  • 种子填充算法

简单的种子填充算法,是在区域内部已经找到的一个像素的基础上,通过邻域搜索的方式向外扩散式填充的方法。

扫描线种子填充算法:从给定的种子点开始,填充当前扫描线上种子点所在的遇见,然后

  • 多边形填充算法

2.4 字符

2.5 反走样技术

当对图形进行光栅化时,用离散的像素表示连续直线和区域边界引起的失真现象称为走样;用于减少或消除走样的技术称为反走样。常用的反走样技术有超采样方法、线段反走样技术、多边形反走样算法;

三. 图形几何变换

3.1 二维几何变换

3.1.1 基本变换

  • 平移变换

  • 绕坐标原点的旋转变换

  • 以坐标原点为基准点的缩放变换

  • 反射变换

  • 错切变换

3.1.2 复合变换

将基本变换进行组测起来,形成复合变换。

3.1.3 坐标系的变换

平移+旋转来达到坐标系的变换。

3.2 三维几何变换

3.2.1 基本变换

  • 平移变换

  • 相对于原点的缩放变换

  • 绕三维坐标轴的旋转变换

  • 反射变换

  • 错切变换

3.2.2 复合变换

将基本变换进行组测起来,形成复合变换。

四. 二维观察

讨论的时输出设备上显示二维图形的问题,主要解决的问题是:

  • 如何方便地在显示设备上对二维图形进行观察?

  • 如何对二维图形进行方向、尺寸和形状方面的变换?

这里涉及到两个术语,窗口、视区;窗口选择看什么,而视区指定在显示设备的什么位置进行观察;

4.1 流水线

一般将二维窗口的内容到设备视区的映射称为二维观察变换,有时也将它简单地称为视口变换;

4.1.1 坐标系

  • 建模坐标系(Modeling Coordinate System, MC)

是一个局部坐标系,同时也是一个典型的平面直角坐标系,它的出现主要是为了模型构建与变换的方便。


  • 世界坐标系(World Coordinate System, WC)

一旦对物品进行建模,下一步就是将各个对象或图形组合放到我们希望绘制的平面场景中。


  • 观察坐标系(Viewing Coordinate System, VC)

当二维图形场景确定后,用户可根据图形显示的要求定义观察区域与观察方向,得到所期望的显示结果,这其实是需要定义视点(或照相机)的位置与方向,完成从观察者角度对整个世界坐标系统的对象进行重新定位和描述,简化后续二维图形的投影面成像的推导和计算。


  • 规范化设备坐标系(Normalizing Device Coordinate System, NDC)

为了使观察处理独立于输出设备,我们可以将对象描述转换到一个中间坐标系,这个坐标系即独立于设备,又可容易地转变成设备坐标系。


  • 设备坐标系(Device Coordinate System, DC)

输出设备自身地坐标系,也可以叫做屏幕坐标系或者像素坐标系。

4.1.2 坐标系之间的变换

  • 建模变换(Modeling Transformation, MT)

MT 就是将在建模坐标系中的建模的物体放到统一的世界坐标系的过程,实现由简单图形生成复杂图形、单个物体到多个物体的组合。


  • 观察变换(Viewing Transformation, VT)

VT 指从世界坐标空间到观察坐标空间的变换,也成为视点变换。


  • 视口变换

在观察坐标系下给定一个窗口对显示对象进行选择,即裁剪。

4.2 裁剪

裁剪使从数据集合提取信息的过程。

  • 点的裁剪

  • 直线裁剪

  • 多边形裁剪

五. 三维观察

5.1 流水线

与二维的流水线过程,多了一个投影变换;

也可以简化为下图:

5.2 观察变换

观察变换指从世界坐标空间到观察坐标空间的变换,也称为视点变换。

5.3 投影变换

将三维物体输出到二维平面上,叫做投影变换;

5.4 裁剪

六. 三维对象

待补充

七. 真实感图形技术

三维真实感图形生成流程图,如下:

  • 构建模型:就是用数学方法建立实体的三维几何描述,并以数据结构的形式存储到计算机系统中。

  • 投影变换:实体的模型是在世界坐标系中建立的,需要将其转换到三维观察坐标系中,即将三维几何模型经过一定变换转为二维平面透视投影图,并选择所期望的观察实体的视、视方向、视域。

  • 消隐处理:确定实体的所有可见轮廓,用消隐技术去除视景之外的和实体上不可见的面,以增强图形的立体感效果。

  • 光照处理:根据光照模型,计算可见场景的颜色或将特定的花纹图案映射到场景表面,并将它转换成适合图形设备的颜色值,从而确定投影画面上每一个像素的颜色,最终生成真实感图形。

7.1 消隐算法

当对物体进行投影时,物体后面部分的轮廓线和表面被前面部分遮挡而不可见,将这种不可见的轮廓线和表面分别称为隐藏线和隐藏面;而消除隐藏线和隐藏面的算法过程,叫做消隐算法;

有如下算法:

  • 深度缓冲器算法,又叫 Z-Buffer 算法。其基本思想是将投影平面每个像素所对应的所有面片的深度进行比较,然后取离视线最近面片的属性值座位该像素的属性值。

  • 画家算法——采用图层的方式进行覆盖遮挡。

7.2 颜色模型

RGB 颜色模型是以 Red(红)、Green(绿)、Blue(蓝)三种原色构成,也叫做三色理论,计算机一般是使用其颜色模型;在其模型基础,增加了不透明参数 alpha,因此称为 RGBA 颜色模型;

CMY 颜色模型是以 Cyan(补色青)、Magenta(品红)、Yellow(黄)三种原色构造,其一般是用于印刷场景使用;

在这里补充一下有关颜色的一些专业术语:

色调:是一种颜色区别于其他颜色的因素,也就是我们平常所说的红绿蓝紫等。

饱和度:是指颜色的纯度;

亮度:也叫明度,其反映了光的明亮程度,即光的强度;可以通俗的理解为颜色中混合了多少白色或黑色。

7.3 光照模型

当光照射到物体表面时,光纤可能被吸收、放射和投射,当进入到人的视觉系统时,在该物体的可见面上将会产生自然光照现象,甚至产生物体的立体感。

光照到物体表面时,物体对光会发生反射、透射、吸收、衍射、折射和干涉。

物体与环境之间的多次光反射,最终达到平衡的一种光,叫做环境光。

当表面的粗糙不平引起的环境光,叫做漫反射光。

而对于透明与阴影是针对投射现象的补充。

7.4 纹理映射技术

纹理(Texture)是物体表面的细小结构,表面纹理通常分为颜色纹理和几何纹理。

  • 颜色纹理是指光滑表面的花纹、图案,如刨光的木材表面的木纹,建筑物墙壁上装饰图案,大理石表面等。其主要通过颜色色彩或明暗度变化体现出来的表面细节。

  • 几何纹理是粗糙的表面,是基于物体表面的微观几何形状的表面纹理。


八. 交互技术

8.1 人机交互界面

从界面开发者的观点来看,不论是用户界面管理系统还是用户界面开发系统,都应该提供应用开发与界面开发的相对独立性,即采用界面与应用分离的原则,这样才便于界面的独立开发与维护。

8.1.1 用户接口模型

  • 程序开发接口——

  • 用户交互操作接口

8.1.2 信息输入控制方式

8.2 交互技术

指使用输入设备完成交互任务的输入技术。

8.2.1 交互输入技术

  • 定位技术

使用定位输入设备完成数据的输入操作技术,主要用于实现图形元素的空间定位,即指定一个坐标。定位分类直接定位和间接定位,直接定位是指定位设备直接在屏幕上制定一个位置点,间接定位是通过定位设备的运动控制屏幕上的映射光标进行定位。

  • 选择技术

  • 定向技术

  • 定路径技术

8.2.2 交互控制技术

  • 构造技术

  • 动态控制技术

8.2.3 图形拾取技术

拾取图形对象的一种技术;

九. 总结

本篇并没有介绍里面的实现原理,而是对整本书进行梳理总结,对图形学有系统性的认识,便于后续了解图形学的实现原理细节进行铺垫,而不再像无头苍蝇乱撞。


发布于: 刚刚阅读数: 3
用户头像

邱学喆

关注

签约作者;计算机原理的深度解读,源码分析 2018-08-26 加入

在IT领域keep Learning。要知其然,也要知其所以然。原理的爱好,源码的阅读。输出我对原理以及源码解读的理解。个人的仓库:https://gitee.com/Michael_Chan

评论

发布
暂无评论
基础篇之图形学_图形_邱学喆_InfoQ写作社区