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. Selenium之(二)Junit单元测试框架

    书目-selenium 实战宝典 章节:第七章 p63-73 1.被测程序 2.测试代码 3.多个测试类整合到一起 4.运行查看结果

  2. sqlite的常用语法

    sqllite 增删改查创建表的语法 创建表db.execSQL("create table user(_id integer primary key autoincrement,numbe ...

  3. C语言程序设计第八次作业

    一.学习内容     本次课学习了一维数组的基本知识,需要大家对如下知识点进行总结:     1. 数组的定义,数组元素的引用,数组的初始化和赋值.     2. 明确以下问题:能否给数组名赋值?为什 ...

  4. 修改 Docker 默认网桥地址

    在公司里搭建docker测试环境,需要访问内部的服务, 由于网段是172.17.导致该容器没有办法正常访问公司内部服务.翻了一下官方的帮助文档,找到了修改默认网桥地址的办法. 首先停止正在使用的 Do ...

  5. JS总结 节点

    nodeName 获取节点名称 元素节点:返回标记名称  属性节点:返回属性名称 文本节点:返回文本#text nodeTyle 获取节点类型 元素节点:返回1 属性节点:返回2 文本节点:返回3 n ...

  6. How to upgrade Subversion on OSX

    How to upgrade Subversion on OSX http://andowebsit.es/blog/noteslog.com/post/how-to-upgrade-subversi ...

  7. cocos2dx-3.9 集成admob

    Part 1: 安装GoogleMobileAds framework (即admob) 1. 安装Cocoapods,否则解决依赖关系和配置真的会把人不累死也得烦死 sudo gem install ...

  8. python基础之内置函数

    该博客内容参考http://www.cnblogs.com/wupeiqi/articles/4943406.html 内置函数 一 详细见python文档,猛击这里 文件操作 操作文件时,一般需要经 ...

  9. Session Tracking Approaches

    cookies url rewriting hidden field see also: http://www.informit.com/articles/article.aspx?p=29817&a ...

  10. 怎么在excel中快速查找重复记录

    假设数字在A列,数字从A1开始:方法一:辅助列中输入公式,数据重复时会出现“重复”提示.=IF(COUNTIF(A:A,A1)>1,"重复","") ,下 ...