1. 图形学简介

1.1 图形学是什么

  1. Computer Graphics(CG): The use of computers to synthesize and manipulate visual information. (引自 GAMES101 课件)
  2. The term computer graphics describes any use of computers to create and manipulate images. (引自 《Fundamentals of Computer Graphics, 4th ed.》)

1.2 图形学不是什么

重点区分图形学计算机视觉数字图像处理这三者的区别:
image.png
(上图引自 GAMES101 课件)

另外也可以参考下面这个知乎提问中的各高赞回答:
计算机视觉,计算机图形学和数字图像处理,三者之间的联系和区别是什么?

1.3 图形学的研究领域

图形学的研究领域主要可以分为以下三类:

  1. Modeling deals with the mathematical specifification of shape and appearance properties in a way that can be stored on the computer. For example, a coffee mug might be described as a set of ordered 3D points along with some interpolation rule to connect the points and a reflflection model that describes how light interacts with the mug.
  2. Rendering is a term inherited from art and deals with the creation of shaded images from 3D computer models.
  3. Animation is a technique to create an illusion of motion through sequences of images. Animation uses modeling and rendering but adds the key issue of movement over time, which is not usually dealt with in basic modeling and rendering.

(以上引自《Fundamentals of Computer Graphics, 4th ed.》)

2. 学习资料

2.1 1 图形学基础-GAMES101

首先介绍以下什么是 GAMES:图形学与混合现实研讨会 - Graphics And Mixed Environment Seminar (GAMES),具体的介绍可见 GAMES简介,你只需要知道他们为华人图形学学子提供了一系列高质量的免费在线课程就够了。

截至 2021/02/23,已经开启了共计 5 门网课,讲课老师都是各种华人图形学大佬。其中 GAMES101 则是作为整个图形学网课系列的一个基础介绍课程,兼具深度与广度。

课程主页:https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html
课程的录播、课件与作业平台都可以在这里找到。

课程的配套教材则是上面多次引用到的虎书《Fundamentals of Computer Graphics, 4th ed.》

此外也强烈推荐这位大佬做的课程笔记系列:计算机图形学系列笔记- 孙小磊

2.2 OpenGL 相关

首先推荐的资料是 LearnOpenGL,写得还是很不错的,不仅仅只介绍图形API,还介绍了很多图形学的理论内容,涉及到的知识面非常广。

但是,在跟着 LearnOpenGL 这个教程学完入门部分的内容之后,强烈建议你去学习一下 Youtube 上一位叫做 TheCherno 的帅哥出的 OpenGL教程系列,因为 LearnOpenGL 虽然涉及的范围很广,但是在图形编程这方面的代码质量,只能说确实算不上优雅。而 Cherno 的视频里虽然涉及的内容没那么多也没那么深入,但到了后面则会给你介绍一些怎么对重复代码进行抽象与封装的技巧,从编程实战的角度来说还是很不错的。(不然你可能就会被上司用“这写的什么垃圾啊”的眼神来阅读你的代码
B站 上也有人搬运了他的视频,对于两个教程相重合的部分的话,请大胆地进行快进或跳过。

当然,学习一套 API 必不可少的自然还有文档了:OpenGL API Documentation

最近在复现论文内容时发现了一本参考书似乎也不错:OpenGL Development Cookbook

2.3 DirectX相关

2.3.1 DirectX11相关

视频学习资料:

  1. C++3D DirectX Programming Series - ChiliTomatoNoodle,b站上有大佬做过该系列的翻译:【人工听译】Directx3D11入门详细教程 - 胡虎护弧呼,配套的 Github 项目地址可在视频的介绍或者评论区找到。Chili 还做过一些其他的教程视频,也很值得学习。

博客学习资料:

  1. DirectX11 With Windows SDK - X_Jun

书籍学习资料:

  1. 《Introduction to 3D Game Programming with DirectX 11》

2.4 数学相关

图形学的基础部分对于数学涉及到的不算太过深入,但是面却非常的广,然后基本上这些在上面提到的虎书里面都有了挺详细的介绍了,但详细的程度当然还是比不上具体单独开的一门数学课就是了。

而在这些数学课里最最最重要的就是线性代数这门课了,几乎可以说线性代数就是你在搞图形学时的使用的基本语言一样,这方面的基础没打好的话会让你寸步难行。这门课的学习资料的话最推荐的还是实用性很强的 GSLA,配套的视频课程在知识库的 相关页面 也有提及。

另外的学习资料的话,有一本专门从实用角度讲图形学与游戏开发的数学的书:3D Math Primer for Graphics and Game Development, 2nd Edition,具体想了解下特定某一部分的内容时可以去参考一下。

对于四元数这个特定的内容,油管上有一份挺不错的讲解:Quaternions-Mathoma,看完这个视频教程之后可以搭配着上面提到那本书里的对应章节进行阅读。

2.5 实践项目

这里暂时只推荐两个手把手教你造轮子的教程:

  1. ssloy/tinyrenderer
  2. Ray Tracing in One Weekend

当然,像 GAMES101 的课程作业也已经是挺不错的实践了,这里只是作为一个补充而已。