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
OpenGL渲染管线的更多相关文章
- OpenGL: 渲染管线理论
http://blog.csdn.net/augusdi/article/details/19934463 学习着色器,并理解着色器的工作机制,就要对OpenGL的固定功能管线有深入的了解. 首先要知 ...
- OpenGL渲染管线(rendering pipeline)
OpenGL中的渲染管线包括:顶点着色器(vertex shader).细分着色器(里面包含两种:细分控制着色器和细分控制着色器)(tessellation shader).几何着色器.光栅化及片元着 ...
- 小强学渲染之OpenGL渲染管线详析
什么是OpenGL? OpenGL是一套图形硬件的软件API接口库,它直接和GPU交互,将3D场景渲染绘制到2D屏幕上.总结说,OpenGL的功能是将程序中定义的各种2D或3D模型绘制到帧缓存中,或者 ...
- opengl渲染管线梳理
opengl渲染管线梳理 http://www.cnblogs.com/zhanglitong/p/3238989.html 坐标系变换和矩阵 http://www.cppblog.com/guoji ...
- 现代OpenGL渲染管线介绍
原文摘选自 现代OpenGL渲染管线介绍 此文对最新的OpenGL做一个简单的介绍,如有理解错误,敬请指正.英文原文: https://glumpy.github.io/modern-gl.html ...
- 图形渲染的大致过程和关于OpenGL渲染管线的一些零碎知识,openglpipeline,vao,vbo,ebo.
重要!!! OpenGL新人一枚,希望可以再此和大家分享有用的知识,少走弯路 文章会定期更新,把前面几段已经整理过的知识更完后,接下来每周至少会更两次. 文章如果有不对的,理解错误的地方,也非常希望在 ...
- openGL图形渲染管线
在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应屏幕的2D像素.3D坐标转为2D坐标的处理过程是由OpenGL的图形渲 ...
- OpenGL shader 中关于顶点坐标值的思考
今天工作中需要做一个事情: 在shader内部做一些空间距离上的计算,而且需要对所有的点进行计算,符合条件的显示,不符合条件的点不显示. 思路很简单,在vertex shader内知道顶点坐标,进行计 ...
- CSharpGL(27)讲讲清楚OpenGL坐标变换
CSharpGL(27)讲讲清楚OpenGL坐标变换 在理解OpenGL的坐标变换问题的路上,有好几个难点和易错点.且OpenGL秉持着程序难以调试.难点互相纠缠的特色,更让人迷惑.本文依序整理出关于 ...
随机推荐
- Unity 几种碰撞模式
1.OnControllerColliderHit 事件 (角色控制器使用) 2.Physics.Raycast 函数 3.OnTriggerEnter 事件 (碰撞物体使用,给碰撞物体添加碰撞器, ...
- position窗口居中
position的四个属性值: relative absolute fixed static 下面分别讲述这四个属性. <div id="parent"> &l ...
- GZipStream 压缩和解压
GZipSteam: GZip 数据格式,它使用无损压缩和解压缩文件的行业标准算法 类 GZipStream有两种模式:CompressionMode.Compress和CompressionMode ...
- docker push 实现过程
这一篇文章分析一下docker push的过程:docker push是将本地的镜像上传到registry service的过程: 根据前几篇文章,可以知道客户端的命令是在api/client/pus ...
- nosql->redis学习 数据类型
redis->string 二进制 setnx name lijie 判断键值 是否存在 如果存在返回0 不存在 吧值设置进去 setex 指定键值有效期时间 setex name ...
- 我的OpenCV学习笔记:VideoCapture类
opnCV 学习博客http://blog.csdn.net/thefutureisour/article/details/7472104 1 OpneCV中的数据共享机制 OpenCV是一个很不错 ...
- [解决方案] pythonchallenge level 3
http://www.pythonchallenge.com/pc/def/equality.html 根据页面提示:一个小写字母刚刚好被左右3个大写字母包围. 查看页面代码得到需要处理的字符. 将字 ...
- c# 禁用 webBrowser 声音(转)
const int FEATURE_DISABLE_NAVIGATION_SOUNDS = 21; const int SET_FEATURE_ON_PROCESS = 0x00000002; [Dl ...
- IE8下ajax请求失败的解决方案
今天发现IE9以下的浏览器,ajax请求返回数据异常研究半天发现是type参数未设置,由于默认方式是Get,添加上type:“post”就恢复正常了
- HDU 5398 (动态树)
Problem GCD Tree 题目大意 n个点的无向完全图,标号1~n,每条边u-->v 的权值为gcd(u,v),求其最大生成树,输出最大边权和. n<=10^5,有多个询问. 解题 ...