【WIP】CMU 15-462 笔记 Part.1

【WIP】CMU 15-462 笔记 Part.1

图片来源:@Lifeline 88401620

增补(感谢 @oyiadin):本系列笔记将添加《Games 101:现代计算机图形学入门》、《Games 102:几何建模与处理》、“龙书”(《Introduction to 3D Game Programming with DirectX 12》)三个额外来源的笔记。大段的非 CMU 课程的笔记会在显著位置标识。

Lecture 1

什么是计算机图形学

计算机图形学:利用计算机合成视觉信息或利用计算机合成 / 操控感官信息的学科。

计算机图形学的应用

  • 影视

  • 动画

  • 游戏

  • 数据可视化

  • 工业设计,平面设计

  • 数字绘画

  • 虚拟现实

    相同的内容后续整理 VR 课笔记时不再赘述。

    • 虚拟现实(VR):指所看到的一切均为虚拟的,比如虚拟现实游戏、虚拟现实视频等。

    • 增强现实(AR):指看到的是真实的现实 + 虚拟的、对当前现实进行分析处理或修改等生成的虚拟事物,比如 Apple ARkit。

    • 混合现实(MR):VR + AR,使用类似 VR 的手段,达到 AR 这种结合当前现实与虚拟事物的效果,比如 Hololens。

  • 制造业(3D 打印)

  • 模拟

  • 排版与字体设计

    • “The Quick Brown Fox Jumps Over The Lazy Dog”:一句有意义的英文句子,内含全部的 26 个英文字母,常用来对字体(字形、字号、间距等)进行测试。

    • “Lorem ipsum dolor sit amet, consectetur adipisicing elit.”:又叫“乱数假文”或者“哑元文本”。主要的目的为测试文章或文字在不同字型、版型下看起来的效果。更多资料请查阅:https://cn.lipsum.com/

  • ……

计算机图形学与计算机视觉的区别

计算机图形学:将数据转化为图形。也就是“画出来”。

计算机视觉:将图形转化为数据。也就是“看到”。

计算机图形学需要哪些基础

  • 表示方法(编码)

  • 采样与混叠

  • 数学方法(表示动态和三位形体)

  • 光线

  • 透视

  • ……

对正方体建个模?

  • 如何表示

    • 顶点:利用坐标

    • 边:利用边的两个顶点唯一确定

  • 如何绘制

    • 三维图形转化为二维图形:小孔成像模型

      设相机坐标为 $(a,b,c)$ ,待确定点的坐标为 $(x,y,z)$ 。要得到该点在二维平面上的坐标,可进行如下算法步骤:

      1. $(x,y,z)$ 与 $(a,b,c)$ 相减,得到原三维点与摄像机的相对位置;

      2. 将其中的 $(x,y)$ 与 $z$ 相除,得到 $(\frac{x}{z},\frac{y}{z})$,即是所求的 $(u,v)$。

    • 连线。这就要细说到电脑如何绘制直线。

计算机怎么划线?

先得知道计算机怎么显示图像:“光栅显示器”。

特点:

  • 图像表示为由 像素 组成的二维网格。

  • 每个像素可拥有不同的颜色值。

光栅化

将连续的物体转换为离散的像素在光栅网格上的表示(即由栅格组成的图像)的过程。也即把顶点数据转换为片元的过程。

怎么光栅化?(简单讨论无粗细的直线)

  • 直接的想法:只要原始的连续物体触及了某个像素,该像素就应该显示。缺点:误差大。

  • 在部分图形 API 中的实现:菱形测试区域法。

  • ……

资料: https://docs.microsoft.com/zh-cn/windows/uwp/graphics-concepts/rasterization-rules

不一定是最优解:看需求。通过需求挑选不同的算法。

除了误差(锯齿),覆盖率也是衡量光栅化效果的重要指标之一。

怎么找到对应的栅格(像素)?

  • 暴力方法:遍历每一个像素,判断是否满足显示要求,满足就点亮进行显示。缺点:速度极慢。

  • “增值行光栅化”:简单的 演示用 自定义算法,利用直线的斜率,确定哪些像素用于显示。

    设有一直线,起点为 $(u_1,v_1)$,终点为 $(u_2,v_2)$。假设有 $u_1 < u_2, v_1 < v_2$ 且 $0<s<1$。可依据如下过程寻找像素(伪代码):

    1
    2
    3
    4
    5
    6
    p = (u, v);
    v = v1;
    for(u = u1; u <= u2; u++) {
    v += s;
    draw(u, round(v));
    }

image-20210411150846062

以上是一个虽简单但完整的 CG 流程——从表示,到计算,到光栅化,再到显示。不过现实的 CG 环境要远远比这复杂。我们没有提到一些对图像(渲染)的真实感至关重要的知识和算法,譬如:

  • 几何体,尤其是复杂几何体

  • 材质,透明半透明或不透明

  • 光线,照明

  • 摄像机

  • 运动

  • ……

Games101 - L1:课程四大部分

常见图形学 API:OpenGL,(Vulkan),DirectX

Games 101 - L2:课程需求

Lecture 2

对线性代数的复习课。只记重点。

  • 对向量进行处理时注意坐标系,除了是直角坐标系还是极坐标系外还要注意坐标系的原点。

  • 向量基本性质:

image-20210411150910886

  • 提示要有探究精神,不要一味的接受“定理”和“定义”,要去思考为什么存在这个定理,这个定理在什么情况下对什么适用,等。

  • 向量可以看成一种“函数”,即矩阵类比函数的观点。

  • 向量的模:也叫向量的“长度”。具有很多性质。

    • 非负性

    • 连续性

image-20210411150926529

作者

Zhou Weitong

发布于

2021-03-30

更新于

2021-08-15

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×