- 总过程The Application Stage、Geometry Stage和Raster Stage。
- Geometry Stage包括Model/View Transform; Vertex shading(即通常意义上的根据物体材质逐顶点渲染,实际上大都放在了pixel shader阶段); Projection; Clipping; Screen mapping(产生像素坐标即gl_FragCoord)
- 只有那些部分在视锥内的geometry进入clip阶段,在六个视平面的交点处产生新顶点,旧顶点被抛弃。这通常由硬件自动完成。
- OpenGL和DirectX的像素中心都有小数位0.5,OpenGL像素坐标左下角为( 0, 0 );而DirectX左下角像素坐标为( 0 ,1 ),微软这么做是因为Windows系统采取这种坐标系。
- Raster stage即Rasterization(光栅化),其中包括四步:Triangle setup(进行顶点插值等);Triangle Traversal(遍历被三角形覆盖的fragment);Pixel shading(像素渲染即pixel shader运行的时间);Merging(与原color buffer进行混合)。
- Merging阶段:alpha test 在 Z-test之前进行。测试顺序:1. 裁剪测试;2. alpha测试;3. 模版测试;4. 深度测试;5. 混合;6. 抖动;7. 逻辑操作。
- Frame Buffer包括color buffer、Z-Buffer、Stencil Buffer和accumulation buffer
- WII可能是最后一个只支持固定渲染管道的机器
- 硬件加速早期功能主要包括三角形的栅格化等
- Shader Model 4.0 use a common shader core。The common-shader core is the API; having unified shaders is a GPU feature. 无法直接编写汇编指令,只能作为输出显示,
- GPU processor has 4-way SIMD (single instruction multiple data). 每个shader阶段都有两种变量:uniform和varying。unifor变量在绘制过程中不能更改,但可在Application Stage阶段修改。
- gradient Information无法在shader的动态分支中使用,即使是离线渲染引擎也如此。
- MRT要求所有RenderTarget是同样高宽,有些系统甚至要求同样的位宽(但格式可以不一致)。
- DirectX10.1可以对MRT采取不同的Blend Operation。
- TranslationMatrix的逆矩阵为T-1 (t) = T(-t), The negated vector t。绕三个轴的旋转矩阵都是正交矩阵,且其迹为tr(R) = 1 + 2cosA, 逆矩阵为Ri -1 (A) = Ri (-A). 如果ScaleMatrix里对角线上为负值,则成为mirror Matrix
- 如果要沿任意向量scale,计算方式如下图
- 法线不能直接乘以object的偏移矩阵,因为法线无需Scale,只需要旋转,所以其只需要Object Matrix的3*3左上角矩阵,具体计算方法看书原文。如图所示
- 欧拉角的万向节锁( gimbal lock ):比如现绕y轴旋转90度,这时现在的z轴即为原来的x轴,所以绕z轴的旋转已经无效。
- 欧拉角完整公式,可从公式中获取h,p,r角度(需注意特殊情况)
- OpenGL的标准化设备空间(Normalized device coordinate)坐标系的取值范围为(-1,-1,-1)到(1,1,1),而DirectX为(-1,-1,0)到(1,1,1)