zoukankan      html  css  js  c++  java
  • OpenGL渲染管线

    OpenGL渲染管线具有一系列顺序处理阶段。两个图形信息数据,顶点数据与像素数据,在管线中被处理、组合,最终写入帧缓存。注意,OpenGL可以将处理过的数据送回到你的程序中。(参考灰色区域)


    OpenGL管线

    显示列表

    显示列表是一组保存(编译)起来以便后面执行的OpenGL命令。所有数据,几何(顶点)与像素数据,都可以保存在显示列表中。由于命令与数据在显示列表中缓存起来,因此显示列表可以提高性能。当OpenGL程序在网络上执行时,你可以使用显示列表来降低网络中的数据传输。由于显示列表作为服务器状态的一部分且保存在服务器上,客户端只需向服务器发送一次命令与数据。(详细请查看显示列表。)

    顶点操作

    每个顶点与法向坐标通过GL_MODELVIEW矩阵进行变换(从模型坐标到观察坐标)传递。如果开启灯光,逐顶点像素光照计算被执行,转换顶点与法向数据。(详细介绍请查看变换)

    图元装配

    顶点操作之后,图元(点、线与多边形)通过投影矩阵再次转换,接着由视锥裁剪平面进行裁剪操作,从观察坐标到裁剪坐标。在此之后,执行除以w的透视除法,并且为了实现3D场景到窗口空间的映射,视口变换被应用。图元装配最后要做的是在裁剪功能开启时的裁剪测试操作。

    像素传递操作

    在像素从客户端内存中解包(读取)出来之后,就对这些数据执行缩放、偏移、映射与截取。这些操作称作像素传递操作。这些传递后的数据保存在纹理内存或直接光栅化到片段。

    纹理内存

    为了作用于几何对象,纹理图片被载入到纹理内存中。

    光栅化

    光栅化就是把几何数据与像素数据转化为片段的过程。片段是包含颜色、深度、线宽、点大小与反走样计算(GL_POINT_SMOOTH、GL_LINE_SMOOTH、GL_POLYGON_SMOOTH)的矩形列表。如果着色模式为GL_FILL,多边形区域的内部像素(区域)将在此阶段填充。每个片段对应帧缓存中的一个像素。

    片段操作

    它是将片段转化到帧缓存中像素的最后阶段。该阶段首先要做的工作是纹理生成;每个纹理单元从纹理内存中产生且作用于单个片段。接着,进行雾计算。再次之后,依次进行多个帧测试:裁剪测试=>Alpha测试=>模板测试=>深度测试。

    最后,执行混合、抖动、逻辑操作与根据位掩码的屏蔽操作,最终实现的像素数据保存在帧缓存中。

    反馈

    OpenGL通过glGet*()与glIsEnabled()命令返回大多数状态与信息。此外,可以使用glReadPixels()从帧缓存中读取矩形区域像素数据,以及可以通过glRenderMode(GL_FEEDBACLK)获取完整的装换后的顶点数据。glCopyPixels()并不返回像素数据到指定系统内存中,而直接复制到另一个帧缓存,如从前缓存复制到后缓存。

    英文原文:http://www.songho.ca/opengl/gl_pipeline.html

    学习与分享
  • 相关阅读:
    bzoj1615 [Usaco2008 Mar]The Loathesome Hay Baler麻烦的干草打包机
    bzoj3402 [Usaco2009 Open]Hide and Seek 捉迷藏
    CF B. Planning The Expedition
    Codeforces ~ 1009C ~ Annoying Present (贪心)
    Codeforces Round#498(Div.3)D. Two Strings Swaps
    牛客Another Distinct Values
    牛客多校第四场 G Maximum Mode
    可持化永久树 的 STL ( rope )
    KMP算法 (字符串的匹配)
    求(3+开根5) N次方的整数部分最后3位
  • 原文地址:https://www.cnblogs.com/hefee/p/3822171.html
Copyright © 2011-2022 走看看