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

OpenGL渲染管线的更多相关文章

  1. OpenGL: 渲染管线理论

    http://blog.csdn.net/augusdi/article/details/19934463 学习着色器,并理解着色器的工作机制,就要对OpenGL的固定功能管线有深入的了解. 首先要知 ...

  2. OpenGL渲染管线(rendering pipeline)

    OpenGL中的渲染管线包括:顶点着色器(vertex shader).细分着色器(里面包含两种:细分控制着色器和细分控制着色器)(tessellation shader).几何着色器.光栅化及片元着 ...

  3. 小强学渲染之OpenGL渲染管线详析

    什么是OpenGL? OpenGL是一套图形硬件的软件API接口库,它直接和GPU交互,将3D场景渲染绘制到2D屏幕上.总结说,OpenGL的功能是将程序中定义的各种2D或3D模型绘制到帧缓存中,或者 ...

  4. opengl渲染管线梳理

    opengl渲染管线梳理 http://www.cnblogs.com/zhanglitong/p/3238989.html 坐标系变换和矩阵 http://www.cppblog.com/guoji ...

  5. 现代OpenGL渲染管线介绍

    原文摘选自 现代OpenGL渲染管线介绍 此文对最新的OpenGL做一个简单的介绍,如有理解错误,敬请指正.英文原文: https://glumpy.github.io/modern-gl.html ...

  6. 图形渲染的大致过程和关于OpenGL渲染管线的一些零碎知识,openglpipeline,vao,vbo,ebo.

    重要!!! OpenGL新人一枚,希望可以再此和大家分享有用的知识,少走弯路 文章会定期更新,把前面几段已经整理过的知识更完后,接下来每周至少会更两次. 文章如果有不对的,理解错误的地方,也非常希望在 ...

  7. openGL图形渲染管线

    在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应屏幕的2D像素.3D坐标转为2D坐标的处理过程是由OpenGL的图形渲 ...

  8. OpenGL shader 中关于顶点坐标值的思考

    今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...

  9. CSharpGL(27)讲讲清楚OpenGL坐标变换

    CSharpGL(27)讲讲清楚OpenGL坐标变换 在理解OpenGL的坐标变换问题的路上,有好几个难点和易错点.且OpenGL秉持着程序难以调试.难点互相纠缠的特色,更让人迷惑.本文依序整理出关于 ...

随机推荐

  1. require.js源码分析

    写的寥寥草草,博客园的布局怎么弄还没有研究,再保存一份草稿,日后在完善,深度研究 require.js 加载顺序 1:加载html主页,require.js文件 2:脚本执行到html中的script ...

  2. Python的平凡之路(21)

    上节内容回顾:1.请求周期url> 路由 > 函数或类 > 返回字符串或者模板语言?Form表单提交:    提交 -> url > 函数或类中的方法     - ... ...

  3. jquery打印特定div

    实现javascript打印功能,打印整个页面就很简单,但如果指定打印某一个区域就有点难点,这里有一个jQuery插件PrintArea可实现打印页面某区域功能. 使用说明需要使用jQuery库文件和 ...

  4. Quartz Core框架之CALayer

    1.继承链:NSObject 2.创建一个layer (1)+ (instancetype)layer :创建和返回一个layer实例对象 (2)- (instancetype)init :返回一个初 ...

  5. Quartz Core框架之core animation

    1.时间功能 (1)CFTimeIntervalCACurrentMediaTime ( void ); :返回当前的绝对时间 2.转换功能 (1)bool CATransform3DIsIdenti ...

  6. elasticsearch-PHP第一天

    遇到很大的问题就是,给边做边找原因,看官方文档,全英文看不懂.只能慢慢一步一步去做.   性子太急,真的不行,跨越性太大,卡一个小时多,才发现,连安装都没搞明白.   首先需要一个JAVA环境,上百度 ...

  7. Razor视图添加命名空间

    在.cshtml文件添加@using MyNamespace,只是在页面添加引用这样编译不通过,还需要在view文件夹的web.config添加引用,找到<namespaces>添加< ...

  8. java 消息机制 ActiveMQ入门实例

    1.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 我下载的时候是 ActiveMQ 5.14.0 Release版 2.运行ActiveMQ 解压缩ap ...

  9. Azure Media Service

    该视频来源于Build 2015, 视频比较老, 从演讲的角度看, 是个非常不错的演讲, 内容也很全面. Apr 27, 2015

  10. 最全的CSS浏览器兼容问题

    CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理方法并整理了一下.对于web2.0的过度,请尽量用xhtml格 ...