使用图形库的一个关键的部分就是和图形API打交道。API(Application Program Interface)即进行一系列相关操作的标准函数集,那么图形API就是例如能把图像和3D表面绘制到屏幕上的窗口的图形函数集。这些图形API一般是和编程语言绑定的,例如D3D12的官方文档中提到C++是唯一被支持进行D3D12开发的语言,如下图所示。因此首先熟悉这些绑定的编程语言是重中之重!
图形管线(Graphics Pipeline)
今天的每台桌面计算机通常都有一个强大的三维图形管线,它是能高效地绘制三维图元的特殊软硬件子系统,这些系统一般都被优化来处理有着共享顶点的三维三角形。在管线中的基础的操作就是把三维顶点位置映射到二维屏幕位置然后着色三角形,来让这些三角形看着很真实的同时又以正确的前后顺序展现到观察者眼前。
尽管以从后往前的顺序绘制三角形在曾今是一个重要的被研究的问题,现在通常都通过深度缓冲(z-buffer)来解决。深度缓冲通过使用一定大小的特殊内存缓冲以一种暴力的方式解决了绘制顺序的问题,从而避免了解决绘制顺序问题中的很多麻烦的地方。
在图形管线中的很多几何操作几乎都能在由三维坐标和齐次坐标(homogeneous coordinate)组成的四维坐标空间中所解决,齐次坐标解决的是透视观察这一问题。四维坐标是通过4x4的矩阵和四维向量所操作的,图形管线可以有效地处理和组合这些矩阵和向量。四维坐标系统是计算机科学中最微妙的构造之一,它也是学习计算机图形学要跨过的最大的一个障碍。不过这本书还是提供了很多方法来理解四维坐标系统和矩阵变换,加上刚入大学的时候学过线性代数,还有写过相关的代码进行实践,我感觉其实没有太多的困难。
图像生成速度很大程度上取决于要绘制的三角形数量,在很多应用中交互性比视觉质量更加重要,减少用于表达模型的三角形的数量是很值得的。而且模型会在不同的距离被观察,相比于近距离观察模型,在远距离观察时其实只需要绘制更少的三角形,因此采用细节等级(LOD——level of detial)方案来表示模型是非常有用的。
数值问题(Numerical Issues)
最重要的也就是第一个步骤,作者也说明了KISS即keep it simple,stupid的准则,大多数优化只能让代码更难阅读,此外应该把时间更多地投入到修复BUG以及增加新的特性上。最后还要注意下有些老的技巧可能不管用了,因为众所周知的是处理器在各种方面正在变得越来越快速。
设计和编写图形程序(Designing and Coding Graphics Programs)