现阶段应该怎么学习计算机图形学呢？
CG攻城狮一枚。随便谈谈。 看了知乎上不少这一类问题的答案都是推荐去看OpenGL红宝书，然后各种实时渲染算法例如shadow map等，再就看是去看游戏引擎相关的书籍了。其实我觉得这种方式有很大的问题。 理由1：大多数人学习图形都最直观的从渲染开始（毕竟OpenGL也是个渲染的API）。然而绝大多数实时渲染的算法，都是一些trick，hack和cheat。所有游戏都会针对自己游戏的场景发明对自己效果好的hack，甚至乎一些常用的算法例如SSAO，shadow map， cube map等，都是在GPU上实现这些效果的高效的方法，也可以说是hack。在没有了解真正如何用数学和物理去表示和计算阴影和环境遮挡就去学习这些hack，颠倒了主次，也限制了你的思维。因为如果不是为了在GPU硬件上做快速的这些事情，会有更接近自然，更简单，也更基于物理的办法。 理由2：通过学习OpenGL / DirectX这些图形API来学习图形学，就好像是通过学习PhotoShop的使用来学习图像处理一样。比方说你学会了如何调整一个图片的对比度，亮度等，但你却不知道这些参数除了视觉反馈以外在图像处理中具体的意义是什么。一个三角形变成一个有颜色像素是经过一系列复杂的过程的，硬件帮你实现了这个过程，直接看API就只是学会了如何设置这个过程中某些步骤的参数，还是没有明白这个过程到底是怎么回事。再就是引擎相关的东西，绝对有必要学，但渲染占一个引擎的分量并不大。所以就不再这说了。 所以我认为就应该先真正从渲染本身的数学和物理学起。学这些的途径的一个好方法就是去实现一个光线追踪渲染器，如果能实现一个基于Path tracing的全局光照，差不多你对用计算机绘制真实感图片这个事情也就入门了。而这个算法又异常简单，基本就是纯粹用代码直观的照抄Rendering equation， 算法本身写下来20-30行。这里再转一个99行代码的基于Path tracing的光线追踪程序smallpt: Global Illumination in 99 lines of C++。总之，实现简单，能学到渲染背后的物理，而不用拘泥于其他人制定的和渲染本身没关系的API，何乐而不为。 等你了解了如何去正确的非hack的计算光的传递（包括了所有阴影，AO，反射等），世界就开阔了。首先你可以继续在光线追踪的不归路上走下去，有无数的坑可以去跳。算法层面的，更加深入的学习全局光照，各种高效的采样渲染方程的算法，Bidirectional path tracing，Photon mapping，Markov chain Monte Carlo等许多。性能层面的：如何快速的实现光线和三角形的求交，还有各种加速结构，转个cpu上的求交引擎Embree。再就是系统层面的，实现一套纹理系统，各种filter，实现可交互的progressive的渲染，场景的编辑，管理，还有材质系统。。无穷无尽的乐趣啊。题主说要搞动画，应该是要走这个方向了，我推荐两本书：Physically Based Rendering: From Theory to Implementation。要是能啃下来，你会学到很多，而且基本可以到开始做和rendering相关的research的能力。这一本要是一开始看的吃力，就先看：Realistic Ray Tracing, Second Edition。 当然除了光线追踪，现在你在回来研究那些实时渲染的算法也会更容易看清它们hack的本质。例如shadow map就只是shadow ray的逆向过程，精度还收到shadow map纹理分辨率的限制。SSAO这种东西，就tmd是纯hack- -。所以现在再学习使用API和写shader就会更轻松。不过要真正了解这些API和图形管线的本质，还是强烈建议自己实现完整的光栅化渲染器。写一遍一个三角形如何变到屏幕上的像素这个过程会真正让你了解这些API到底在干什么。关于这方面可以参照 如何开始用 C++ 写一个光栅化渲染器？ - Yong He 的回答 还有就是强烈推荐这个博客http://fgiesen.wordpress.com/2011/07/09/a-trip-through-the-graphics-pipeline-2011-index/的文章。对我自己实现光珊化渲染器的时候起了不少帮助。学API的话其实DirectX的那些Sample是不错的材料，也可以看看。 其实图形学的另一个对动画很重要的分支是simulation。这个方向大家讨论的少一些，最常见的例子就是基于SPH的流体模拟，同样的因为适合GPU并行，可以用在游戏里，而且DirectX里有sample code。因为似乎很多人喜欢拿这个算法入门，这里想特地说一下，这个算法就像所有之前的real time hack一样，这个算法本身也是hack，就算你实现了它你也不会明白流体是怎么回事，因为所有的公式都没有任何物理意义，连最最基本的Navie-Stokes方程 都没有学到（真佩服作者怎么试出来的）。所以不推荐拿它来学习。如果对流体有兴趣，我推荐一个最基本的流体模拟程序和它的文档，用有限差分求解NS方程的最简单实现，Jos Stam: publications（点那个Real-Time Fluid Dynamics for Games）。如果有兴趣深究，则可以去读Fluid Simulation for Computer Graphics。 而去也不要一开始就一味的在gpu上实现，gpu上的编程比直接用软件多了很多不必要的障碍，不适合学习物理这种基础理论。而去gpu上要直接写出比cpu快的精确模拟相当难。不要跟我提physx，那也有许多hack，不适合学习。当然，还有很多其他的物理模拟，就不再这说了。 希望对大家有帮助。