图形学复习要点

这篇文章总结一下图形学在游戏开发工程师面试时常考(可能会考)的问题。虽然图形学在面试中的比重比较小,但是还是要复习一下的。图形学的考点分为三部分,一是渲染管线,二是数学尤其是线性代数和三维几何。

一、渲染管线

1.1 有那几个坐标系(空间)?如何在空间之间转换?

有五个坐标系,分别是:
  1. 物体坐标系(本地坐标系)Local Space 或 Model Space
  2. 世界坐标系 World Space 
  3. 观察者坐标系(摄像机坐标系)View Space 
  4. 裁剪空间 Clipping Space 
  5. 屏幕空间 Screen Space 
其中前四个矩阵之间需要通过 model, view , projection矩阵变换,裁剪空间到屏幕空间通过 视口变换进行;前三个是三维空间,后两个是二维空间。

图1.1 坐标系(空间)的转换
所有的变换都发生在顶点着色器,经过顶点着色器,所有顶点都变成了屏幕上的二维坐标,下一步进行图元装配后进入几何着色器。

1.2 三个重要的空间变换矩阵?作用?

需要注意这三个矩阵都在顶点着色器中应用。
  • Model matrix 模型矩阵。进行从物体坐标到世界坐标的转换。控制了物体的平移、旋转、缩放。在3D建模软件中为模型坐标,导入游戏后使用model matrix 进行大小、位置、角度的设置
  • View matrix 观察矩阵。将世界坐标系变换到观察者坐标系,通过一些列平移、旋转的组合来移动整个场景(而不是移动摄像机,摄像机 是一个虚拟概念,事实上代码中并没有摄像机camera,而是用view matrix来表示摄像机,然后把view matrix附加到每一个物体,来模拟摄像机),用来模拟一个摄像机
  • projection matrix 投影矩阵。将观察者坐标系转换到裁剪坐标系。将3D坐标投影到2D屏幕上,裁剪空间外的顶点会被裁剪掉,投影矩阵指定了坐标的范围。

1.3 视口变换是什么?

视口变换发生在投影到2D屏幕后,将投影之后归一化的点映射到屏幕上指定的一块区域。在OpenGL中,通过glViewPort指定。

1.4 渲染管线的流程?


下面的图更形象

其中,gl_Position在从顶点着色器输出后,会由OpenGL自己进行归一化和视口变换:

片段处理程序的input是顶点处理程序的output经过了插值以后得到的值。

1.5 三种着色器分别有什么用?完成了什么过程?

  • 顶点着色器。计算顶点的位置,并将顶点投影在二维屏幕上。
  • 几何着色器。将形状(图元)划分为更多的形状(图元),影响后序的插值结果。
  • 片段着色器。根据顶点着色器和几何着色器的输出插值,计算每一个片元的颜色。之后进行测试和混合后生成最终的像素。

1.6 什么是光栅化?

光栅(栅格化或者像素化)化负责的是整个渲染过程中的几何成像环节,把几何图元(点、线,面)投影到成像平面并 确定哪些像素或采样点被图元覆盖。举例:
  • 输入,一个三角形的三个顶点,(x0,y0,z0,w0) (x1,y1,z1,w1) (x2,y2,z2,w2)
  • 输出,这个三角形会覆盖屏幕上哪些像素,可以认为是 Point2d [ ]

1.7 OpenGL中有哪几种缓冲?都有什么用?

  • 帧缓冲Frame Buffer, 用于创建零时的渲染上下文,帧缓冲是一些二维数组和OpenG所使用的存储区的集合:颜色缓存、深度缓存、模板缓存和累计缓存。默认情况下,OpenGL将帧缓冲区作为渲染最终目的地。此帧缓冲区完全由window系统生成和管理。这个默认的帧缓存被称作“window系统生成”(window-system-provided)的帧缓冲区。
    • 颜色缓冲 Color Buffer, 包含每个象素的颜色信息。颜色信息可以是颜色索引值(在颜色索引方式下),也可以是颜色的红、绿、蓝3个分量(在RGBA方式下),还可以存放表示物体透明程度的Alpha值。
    • 深度缓冲 Depth Buffer, 包含每个象素的深度值。深度值与z坐标有关,描述物体上某点距离观察点的远近,也可以称它为Z缓存(Z Buffer) 。
    • 模板缓冲 Stencil Buffer, 包含物体的模板值。模板值具有屏蔽作用,用于控制绘制的区域,使屏幕上某些区域可画,某些区域不可画。
    • 累积缓存(Accumulation Buffer) 包含颜色信息。其可以合成一系列的绘制结果,实现某些特殊效果。
  • 顶点缓冲 Vertex Buffer, 用于缓存顶点数据
  • 元素缓冲 Element Buffer,用于缓存顶点序号数据

1.8 Alpha 混合的几种方式?

通用公式:
  • 14
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值