计算机图形管线(实时渲染管线)

在计算机图形学中,计算机图形管线(渲染管线 或简称 图形管线)是一个概念模型,它描述了图形系统将 3D场景渲染到2D屏幕所需执行的步骤 。

早期计算机图形管线是立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便。大多数功能都被库隐藏起来,开发者很少能控制如何进行计算的自由。而开发者迫切希望能有更多的灵活性。随着时间推移,规范越来越灵活,开发者对绘图细节有了更多的掌控,也就有了我们现在的可配置可编程的渲染管线。
计算机图形管线(实时渲染管线)_第1张图片
上图来自于LearnOpenGL,大家可以
我们根据上图详细描述下计算机图形管线:

  1. 顶点着色器(可编程),将顶点数组的点逐个传入顶点着色器进行处理,比如说旋转、视图透视投影转换等,再输出顶点数据

  2. 图元装配(可配置),形成三角形,收集之前的顶点数据转换成一系列有序的简单图元,说明下这里的图元其实就是你写的drawArrays或是drawElements函数中你指定的第一个参数:线,点或三角形。

  3. 几何着色器(可编程)在OpenGL中是可选的,WebGL中没有。几何着色器以一个或多个表示为一个单独基本图形(primitive)的顶点作为输入,比如可以是一个点或者三角形。几何着色器在将这些顶点发送到下一个着色阶段之前,可以将这些顶点转变为它认为合适的内容,比如说三角形变成六边形。

  4. 转换反馈就是输出屏幕坐标点和Z值缓存等

  5. 光栅化(可配置),从连续图元创建离散片段。简单理解,就是三角形离散成各个像素点,因为三角形是要通过像素点绘制的。在这一阶段,虽然转不可编程的,但还可以配置裁剪图元、背面剔除等功能。
    (说明下,在其他地方可能会说裁剪图元、背面剔除是在图元装配阶段,我也不确定哪个是对的,但按照learnOpenGL的说法,是在光栅化阶段,毕竟几何着色器在图元装配之后,如果在图元装配阶段图元都丢了,几何着色器还变啥形啊。不过,我们可以确实的是这些操作一定在片元着色器之前。)

    • 裁剪图元,裁剪掉不在显示范围内的图元。
    • 背面剔除,在背面不显示的部分去除,三角形基元可以根据窗口空间中三角形的朝向进行剔除(即:不渲染而丢弃)。在WebGL和OpenGL中,顶点数据并不是按照逆时针环绕顺序定义的,都属于背面。
  6. 片元着色器(可编程),获取每个像素的颜色、深度值(如果有纹理,就取当前像素点对应的纹理信息)等,根据片元着色器的代码,把它转换成最终的颜色。

  7. 混合和测试(可配置)。

    • 模板测试:启用后,如果测试提供的模板值与用户指定的模板值与模板缓冲区中基础样本的模板值不进行比较,则测试将失败。请注意,即使模板测试失败(甚至深度测试失败),仍可以修改帧缓冲区中的模板值。一般用来做物体描边或裁剪图形。
    • 深度测试:启用后,如果片段的深度没有按照用户指定与深度缓冲区中基础样本的深度值进行比较,则测试将失败。
    • Alpha混合:是一种将图像与背景结合的过程,结合后可以产生部分透明或全透明的视觉效果。

本人知识尚浅,可能会存在错误,请大家多看多想,不要听信一家之言,如有错误,请指正,Thanks♪(・ω・)ノ

你可能感兴趣的:(计算机图形学,webgl)