【OpenGL】OpenGL渲染流程详解

查阅过很多资料,在OpenGL的整个渲染流程中很多资料上描述的过程大致相同却又略去了很多细节,可以说是每一份资料的描述都不尽相同,或许每个作者所阐述的重点都不太相同,不存在孰对孰错

  • 例如:《OpenGL ES 3.0编程指南》中对可编程管线的流程介绍如下:

    1. VBO/VAO(顶点缓冲区对象或顶点数组对象)
    2. VertexShader(顶点着色器)
    3. rasterization(光栅化)
    4. FragmentShader(片段着色器)
    5. Per-Fragment Operations(逐片段操作)
      • pixelOwnershipTest(像素归属测试)
      • ScissorTest(剪裁测试)
      • StencilTest and DepthTest(模板和深度测试)
      • Blending(混合)
      • dithering(抖动)
    6. Frame Buffer (帧缓冲区)
  • 又例如:《实时计算机图形学》一书中,将图形绘制管线分为三个主要阶段:应用程序阶段、几何阶段、光栅阶段

    1. 应用程序阶段:
      • 主要和CPU、内存进行交互,在此阶段有碰撞检测、场景图建立、空间八叉树更新、视锥剪裁等算法都在此阶段执行
      • 几何体数据(顶点坐标、法向量、纹理坐标、纹理等)这些信息会通过数据总线传送到图形硬件数据总线规范了一个大的集成应用系统中同构系统、异构系统等方面进行数据共享和交换实现方法。 系统间数据交换标准
    2. 几何阶段:
      • 顶点坐标变换、光照、剪裁、投影、屏幕映射 均在GPU进行运算(顶点着色器就在此阶段执行
      • 该阶段的末端会得到经过变换和投影之后的顶点坐标、颜色、纹理坐标,这些数据将作为光栅化阶段的输入进一步处理
    3. 光栅阶段:
      • 光栅化:决定哪些像素被集合图元覆盖的过程(其实就是将图元拆分成多个片段的过程,图元是由几个点组成的点、线、面)
        • 例如:面形状的图元最少3个点(A、B、C三个点)即可组成,那么屏幕是由众多个像素点组成的,那ABC三个点围成的三角形中有多少个像素点呢?那么其实光栅化就是用来分解图元得到这些像素点的过程,当然这其中还有一个重要的过程就是插值,插值出那个图形区域的像素(纹理坐标v_texCoord、颜色等信息)。注意,此时的像素并不是屏幕上的像素,是不带有颜色的。接下来的片段着色器完成上色的工作。
        • 注意:光栅化不是着色的阶段!片段着色器才是给每个像素绘制颜色的阶段,我在很多博客上都看到过错误的讲解,都有提到光栅化是上色的过程
      • 着色器上色

以上,都是关于流程的简要过程,下面会详细的描述整个渲染流程


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zok93

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值