OpenGL渲染流水线
- 其实OpenGL的流水线,对我学习来说只能算是一个概念性的东西。毕竟OpenGL也在发展,流水线也不会是一成不变的。
- 不过理解流水线的过程,重点在于理解每一步的作用,进而可以如何衔接起来,完成整个绘制图像的工作。顺序不一定相同,但仍能完成工作,但效率上肯定会有差。
状态机
- 在OpenGL中,我们输入的总是
- “顶点”
- 但同时我们也会改变许多
- “状态”
- 比如
- 当前顶点颜色glColor
- 当前顶点的法向量glNormal
- 当前相机的位置、朝向、正向gluLookAt
- 作用于当前 顶点 的旋转、平移、缩放效果
- ……
- 所以我们叫OpenGL是一个状态机,因为你输入的每一个顶点数据,在那一行代码的时刻就有各种各样的状态对应着这个顶点,而这个顶点也必须经过这些状态的变化后,才是最终你所希望绘制的顶点
流水线的工作过程
- 所以我们有了什么?
- 世界坐标系下的一堆顶点数据
- 每个顶点所对应的各种状态变量
- 其他内容如视景体、视口……
- 想象一下如何生成最后的图像
- 对于顶点,我们需要把各种状态作用在上面,比如你设置的颜色、光照模型下这个顶点应该是什么颜色、进行的旋转等变换、顶点相对于相机的坐标、如果有透视效果会让顶点的坐标发生偏转,,,,,,之后才算一个真正的顶点
- 对于这些点,我们还需要确定这些顶点构成了怎样的图形,OpenGL里成为图元,如这三个顶点的含义是一个三角形,那四个是一个四边形,,,,,,这些信息就需要装配起来,否则顶点只是一个点,组成图形后才有更深的意义
- 对于图元,我们进一步根据你设置的视景体(三维的区域,只有区域内部才会被用来生成图像)来进行裁剪,剩下的图元就是要用来生成图像的,只是这个时候数据都是连续的数学抽象表达,而图像却是离散的像素点
- 所以,我们进一步进行光栅化(也叫扫描转换),确实每一个图元对应了哪些像素。比如一条线段只有两个顶点的数据,两个顶点会至少各占一个像素的位置,但是这条线段要连续,就要让这条线段进一步占用两个顶点之间的像素的位置。于是我们得到了一个个像素的数据,OpenGL里称之为片段或片元
- 但这些像素尚不能作为最终的图像的像素,进一步的片段处理会根据是否有纹理贴图进一步修改像素的颜色、对于三维空间中的物体的遮挡关系根据某种方法只显示在前面的物体、是否需要对锯齿效果进行反走样等等……
- 大概就是这样

细说流水线
其实我也只是学了很少的内容而已,不过作为一个简单的理解入门还是勉强够格的
- 顶点处理
- 坐标
- 齐次坐标表示
- 坐标系
- 世界坐标系
- 相机坐标系
- 裁剪坐标系
- 模型视图矩阵
- 模型变换矩阵
- 旋转矩阵
- 平移矩阵
- 缩放矩阵
- 视图矩阵
- 相机的位置、朝向、正向
- 视图矩阵
- 模型变换矩阵
- 投影矩阵
- 视景体
- 透视投影矩阵
- 正交投影矩阵
- 光照模型
- 光照分析
- 光源类型
- 材质类型
- Phong光照模型
- Blinn-Phong光照模型
- 光照分析
- 坐标
- 裁剪
- 线段裁剪算法
- Cohen-Sutherlend算法
- Sutherland-Hodgeman算法
- 多边形裁剪算法
- Sutherland-Hodgeman算法
- 线段裁剪算法
- 光栅化(扫描转换)
- 线段扫描转换
- DDA 数字微分分析器
- Bresenham算法
- 多边形扫描转换
- 内外点检测算法
- 凸多边形
- 奇偶检测
- 环绕数
- 填充算法
- 种子算法
- 扫描线算法
- 新边表
- 活动边表
- 内外点检测算法
- 线段扫描转换
- 片段处理
- 隐藏面消除
- 对象空间算法
- 画家算法
- 深度排序
- 简单
- 复杂
- 背向面剔除(多边形拣选)
- 图像空间算法
- 深度缓存ZBuffer
- 隐藏面消除
OpenGL渲染流水线的更多相关文章
- Unity Shader入门精要学习笔记 - 第2章 渲染流水线
来源作者:candycat http://blog.csdn.net/candycat1992/article/ 2.1 综述 渲染流水线的最终目的在于生成或者说是渲染一张二维纹理,即我们在电脑屏 ...
- Unity 渲染流水线 :CPU与GPU合作创造的艺术wfd
前言 对于Unity渲染流程的理解可以帮助我们更好对Unity场景进行性能消耗的分析,进而更好的提升场景渲染的效率,最后提升游戏整体的性能表现 Unity的游戏画面的最终的呈现是由CPU与GPU相互配 ...
- CSharpGL(31)[译]OpenGL渲染管道那些事
CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...
- OpenGL渲染流程
一.什么是openGL OpenGL被定义为“图形硬件的一种软件接口”.从本质上说,它是一个3D图形和模型库,具有高度的可移植性,具有非常快的速度. 二.管线 管线这个术语描述了opengl渲染的整个 ...
- 初始化glew,创建OpenGL渲染上下文
void RegisterWinDowClass(HINSTANCE hInstance,std::string className,WNDPROC proc) { WNDCLASS wndClass ...
- 移动端 像素渲染流水线与GPU Hack
什么是 像素渲染流水线 web页面你所写的页面代码是如何被转换成屏幕上显示的像素的.这个转换过程可以归纳为这样的一个流水线,包含五个关键步骤: 1.JavaScript:一般来说,我们会使用JavaS ...
- 一个使用openGL渲染的炫丽Android动画库二(碎片化曲面动画)
续一个使用openGL渲染的炫丽Android动画库 MagicSurfaceView v1.1.0发布, 新增碎片化曲面动画 地址:https://github.com/gplibs/android ...
- Shader 入门笔记(二) CPU和GPU之间的通信,渲染流水线
渲染流水线 1)应用阶段(CPU处理) 首先,准备好场景数据(摄像机位置,视锥体,模型和光源等) 接着,做粗粒度剔除工作. 最后,设置好每个模型的渲染状态(使用的材质,纹理,shader等) 这一阶段 ...
- 关于QT Graphics View开启OpenGL渲染后复选框、微调框等无法正常显示的问题
之前学习QT Graphics View框架,除了基本的图元外,还可以通过QGraphicsProxyWidget类添加QT的基本Widget(如按钮.复选框.单选框等),常使用的场景类接口如下: Q ...
随机推荐
- Flume之核心架构深入解析
我们一起来了解Source.Channel和Sink的全链路过程. 一.Flume架构分析 这个图中核心的组件是: Source,ChannelProcessor,Channel,Sink.他们的关系 ...
- C#使用Sockets操作FTP
http://blog.csdn.net/foart/article/details/6824551 using System; using System.Collections; using Sys ...
- codeforces763C
解题报告: 直接截图好了...辣鸡博客园不能上传文件
- 自己动手写OpenStack的QoS功能(4)
本文地址:http://blog.csdn.net/spch2008/article/details/9283561 数据库相应操作已完成,对OVS-Plugin进行修改. 在quantum\plug ...
- SSIS包的组建之连接管理器
上一篇我们通过一个示例来介绍一下SSIS 包的开发.接下来的内容我们将学习一下包中各个选项卡的使用.如:连接管理器选项卡.控制流选项卡.数据流选项卡和事件处理选项卡等等.这一篇将介绍一下连接管理器作用 ...
- node.js 操作excel
首先安装依赖库node-xlsx npm install node-xlsx 在操作文件中直接引用 var xlsx = require("node-xlsx"); 读取excel ...
- 20180403_调bug_大地保险_jar包冲突
一.异常现象 他们程序在本地通过java形式直接跑起来的时候,是正常的. 但是测试服务器上,程序跑到一半就不继续往下走了,而且,也不报错,日志里面没有任何信息. 二.异常解决 1.核心思想 抽丝剥茧, ...
- itunesconnect如何提交被决绝过了的相同版本号
遇到一次审核被拒,打算再次提交时,不想改变版本号,可以在xcode里把build版本号后面几个.1,比如version上次被拒时是1.1.3,build也是1.1.3,这次送审时version不变,b ...
- linux查询组与用户getent
getent group zabbix getent passwd zabbix getent group zabbix > /dev/null || groupadd -r zabbixget ...
- 4、运行成功的Demo(PyCharm+Selenium)
1.打开PyCharm,新建一个python.file,输入代码“from selenium import webdriver”报错的解决方法 (1)PyCharm没有找到正确的python,在“Fi ...