【面试】【知识点总结】图形学

图形学

  • 渲染管线
    顶点数据输入 (Vertices)
    顶点着色器 (Vertex Shader)
    曲面细分着色器 (Tessellation Shader)
    几何着色器 (Geometry Shader)
    图元装配 (Primitive Setup)
    裁剪剔除 (Culling and Clipping)
    屏幕映射 (Screen Mapping)
    光栅化 (Rasterization)
    片段着色器 (Fragment Shader)
    混合测试 (Blending and Testing)
    【面试】【知识点总结】图形学

  • 顶点数据
    顶点坐标,顶点纹理,顶点法线,顶点颜色等
    顶点缓存(Vertex Buffer),索引缓存 (Index Buffer)

  • 顶点着色器
    输入顶点数据

    • 坐标变换:(*为顶点着色器中)
      局部坐标 (Local Coor)
      | 模型矩阵 Model *
      世界坐标 (World Coor)
      | 观察矩阵View *
      观察坐标 (View Coor)
      | 投影矩阵Projection *
      裁剪坐标 (Clip Coor)
      | 透视除法
      标准设备空间 NDC (Normalized Device Coor)
      | 视口变换
      窗口坐标【面试】【知识点总结】图形学
    • 法线变换
      • 平移不变,旋转乘渲染矩阵,非均匀缩放 (矩阵逆变换)
    • 投影
      • 透视投影 (Projective Projection) : 视锥体 (Frustum): znear,zfar,视角FOV(Field of View),屏幕纵横比(Aspect Ratio)
      • 正交投影 (Orthographic Projection) : 正方体
    • 着色
      • 平面着色 (Flat Shading) : 三角形第一个点标识颜色
      • 高洛德着色 (Gouraud Shader) : 顶点着色器中计算顶点颜色,光栅化插值颜色
      • 冯氏着色 (Phong Shading) : 光栅化插值法线,片元着色器中计算颜色
  • 曲面细分着色器 (Tessellation Shader)

  • 几何着色器 (Geometry Shader)

  • 图元装配
    向顶点装入DrawCall指定的图元

  • 裁剪【面试】【知识点总结】图形学

  • 背面剔除
    删除背对摄像机的图元,法向量判断,三点顺时针剔除,逆时针保留(右手定则)
    可以设置剔除方向back/front

  • 屏幕映射 (Screen Mapping)

    • 透视除法:点坐标为齐次坐标,经过透视矩阵变换后w值不为1,将xyz除以w以达到近大远小
    • 视口变换:将NDC坐标转换为窗口坐标,将z坐标映射到[-1,1](OpenGL), glViewport() 设定视口坐标&宽高
  • 拾取

  • 光栅化

    • 线段光栅化:
      • 数字微分画线 DDA(Digital Differential Analyzer) : 取增量x判断y,有浮点运算
      • Bresenham :没有浮点数运算,d = Δx(b-a) 判断d
        【面试】【知识点总结】图形学
  • 片段着色器 (Fragment Shader)

    • 光照模型
      • Phong : 计算高光:光源向量关于法线反射向量计算(不连续,大于90度为负)
      • Blinn-Phone:计算高光:光源向量+视角向量计算 (连续)
  • 纹理

    • 法线贴图
  • 锯齿和抗锯齿 (Aliasing and Anti-aliasing)

  • 阴影

    • 阴影贴图
  • 测试

    • 裁切测试
    • Alpha测试
    • 深度测试
    • 模板测试
  • 混合

    • Alpha混合