基本图形硬件流⽔线设计
应⽤程序层(3D应用程序或游戏) -> 硬件抽象层(OpenGL / Direct3D) -> 硬件层(GPU)
应⽤层
游戏和应⽤软件的开发人员为主体,通过调⽤API进⾏上层开发,不需要考虑移植性问题。
应⽤程序层主要与内存,CPU打交道,诸如碰撞检测,场景图监理,视锥裁剪等经典算法在此阶段执⾏。在阶段的末端,⼏何体的数据(顶点坐标,法向量量,纹理理坐标,纹理理)等通过数据总线传送到图形硬件
硬件抽象层
抽象出硬件的加速功能,进⾏有利于应⽤层开发的封装, 并向应⽤层开发提供API
我们⽬前使⽤的是DirectX与OpenGL。对于这⼀部分,主要是⼀些API等的调⽤
硬件层
将硬件驱动提供给抽象层,以实现抽象层加速功能的有效性。
硬件层在渲染流水线中最为复杂,也最为重要。可编程渲染流水线与固定渲染流水线的区别在于是否对着⾊器进行编程。
固定渲染流⽔线主要分为以下⼏个阶段:
顶点变换->图元转配与光栅化->⽚段纹理映射和着⾊->光栅化操作
渲染流程图
固定渲染管线流程图

可编程渲染流⽔线流程图

GPU 图形渲染管线

应⽤程序阶段
主要是高级编程语言开发,C,OC,C++
输出: 通过数据总线,把几何体的数据(顶点坐标\法线\纹理理坐标\纹理理)等传送到GPU上。
几何阶段
输入: 应用程序末端的内容
负责任务: 顶点着色、坐标变换,生成图元,裁剪,投影,屏幕映射
输出: 经过变换和投影之后的屏幕坐标,颜色,纹理坐标
三维坐标转为二维屏幕坐标过程:

MC是建模坐标系,WC是世界坐标系,VC是观察坐标系,PC是投影坐标系,NPC是规格化投影坐标系,DC是设备坐标系
光栅化阶段
光栅化(Rasterization):将顶点数据转换为⽚元的过程! 将具体的图转化为一个栅格组成图像的作用。
片元中每个一个元素对于帧缓存区的一个像素;
光栅化其实是一个将几何图元变成一个二维图像的过程!!
光栅化的过程就是为了产出片元。
网友评论