OpenGL 图形管道(graphics pipeline)过程
1.总结:Graphics pipeline 主要分为两部分工作
- 把3D坐标转换成2D坐标
- 把2D坐标转换成真实的有颜色的像素
2.下图就是一个顶点数据经过几个步骤后转化成显示在屏幕上像素的过程(一般也叫做GLSL的流水线工作流程),蓝色图形部分是我们可以通过写shader文件参与的,目前参与比较多的主要是顶点和片段shader。
3. 对上图每个步骤进行解析
3.1 Vertex Data[]传到顶点shader程序
3.2 顶点着色程序对顶点数据进行转换,把Vertex Data中的3D坐标转换成对应的不同于Vertex Data中的3D坐标,在这里,顶点着色程序允许用户进行一些基本的处理和顶点属性设置。
3.3 shape assembly(也叫 primitive assembly) 是一个对顶点数据进行简单的组合过程,比如上图就是把3个点组合成一个三角形。
3.4 简单组合后竟然几何着色程序,根据输入的vertices(顶点数据集)能生成新的或者说是其他的图形,在上图中生成了一个新的三角形.
3.5 经过几何着色后就会进入细分着色程序。在这里有能力生成更小更多的小的简单的图形,在上图中我们自己让它生成更小更多的三角形。
3.6 之后就是进入光栅化过程,在这里会把原始的图形最终转换成在屏幕上显示的相对应的像素,在这里会进行对显示内容进行判断(比如有些超出屏幕显示就会被截掉等),其中最终生成的片段会在片段着色器中使用。
3.7 片段着色器会计算每个像素在屏幕上显示的最终颜色
- OpenGL 3.3以后,OpenGL程序就必须要定义一个vertex shader 和 fragment shader(因为在GPU中没有默认定义的 vertex/fragment shaders)。
OpenGL 图形管道(graphics pipeline)过程的更多相关文章
- OpenGL ES 3.0 Graphics Pipeline
一:OpenGL ES 3.0 Graphics Pipeline 渲染管道如下图 1.Vertex Buffer/Arrays Objects的数据由应用程序传进来 2.由上图可以看到Textur ...
- OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)? 图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序.用户模式显示驱动程序,是由Microsoft Direct3D运行时加 ...
- [译]Vulkan教程(13)图形管道基础之Shader模块
[译]Vulkan教程(13)图形管道基础之Shader模块 Shader modules Unlike earlier APIs, shader code in Vulkan has to be s ...
- CSharpGL(31)[译]OpenGL渲染管道那些事
CSharpGL(31)[译]OpenGL渲染管道那些事 +BIT祝威+悄悄在此留下版了个权的信息说: 开始 自认为对OpenGL的掌握到了一个小瓶颈,现在回头细细地捋一遍OpenGL渲染管道应当是一 ...
- [译]Vulkan教程(16)图形管道基础之总结
[译]Vulkan教程(16)图形管道基础之总结 Conclusion 总结 We can now combine all of the structures and objects from the ...
- [译]Vulkan教程(14)图形管道基础之固定功能
[译]Vulkan教程(14)图形管道基础之固定功能 Fixed functions 固定功能 The older graphics APIs provided default state for m ...
- [译]Vulkan教程(12)图形管道基础之入门
[译]Vulkan教程(12)图形管道基础之入门 Introduction 入门 Over the course of the next few chapters we'll be setting u ...
- OpenGL图形渲染管线、VBO、VAO、EBO概念及用例
图形渲染管线(Pipeline) 图形渲染管线指的是对一些原始数据经过一系列的处理变换并最终把这些数据输出到屏幕上的整个过程. 图形渲染管线的整个处理流程可以被划分为几个阶段,上一个阶段的输出数据作为 ...
- [译]Vulkan教程(15)图形管道基础之RenderPass
[译]Vulkan教程(15)图形管道基础之RenderPass Render passes Setup 设置 Before we can finish creating the pipeline, ...
随机推荐
- php 随笔
<?php header("content-type:text/html;charset=utf8");class Car { var $name = '汽车'; ...
- POJ 3020 Antenna Placement(无向二分图的最小路径覆盖)
( ̄▽ ̄)" //无向二分图的最小路径覆盖数=顶点总数-最大匹配数/2(最大匹配数=最小点覆盖数) //这里最大匹配数需要除以2,因为每两个相邻的*连一条边,即<u,v>和< ...
- openwrt 路由器变砖后修复方法
https://wiki.openwrt.org/doc/howto/generic.debrick 变砖后需根据类型进行修复,主要有以下四种: (1)if only something on the ...
- PHP中try{}catch{}的具体用法详解
PHP中try{}catch{}是异常处理,将要执行的代码放入TRY块中,如果这些代码执行过程中某一条语句发生异常,则程序直接跳转到CATCH块中,由$e收集错误信息和显示.任何调用 可能抛出异常的方 ...
- 希望获取到页面中所有的checkbox怎么做?
var domList = document.getElementsByTagName(‘input’); var checkBoxList = []; var len = domList.lengt ...
- 让 idea webstorm phpstorm 能够 识别 thinkphp 的方法(自动提示功能)
1.在/ThinkPHP/Library/Think 目录下 新建一个文件,名为: BaseController.class.php 2.BaseController.class.php 内容为 n ...
- 团队项目(spring会议)
[例会时间]2014/4/11 [例会地点]一教213课堂上 [例会形式]小组讨论 [例会主持]马翔 [例会记录]兰梦 在这次会议上,我们针对我们的项目进行了分割,并分别认领各自的任务 下面是任务的认 ...
- MTK平台Android项目APK预置方案
项目开发中,通常需要向系统中预置一些APK,这里简单介绍一下MTK平台预置APK的方法. 需要预置的apk可以放置在目录:vendor/mediate/${Project}/artifacts/out ...
- C# 二维数组和集合
本次课我主要学习了二维数组和集合的部分内容. 在二维数组的部分中,我主要学习了二维数组的定义方法:int [,] array=new int [4,2];做了一个小练习:用二维数组打印自己的姓氏. s ...
- 从MySQL全库备份中恢复某个库和某张表【转】
从MySQL全库备份中恢复某个库和某张表 一.全库备份-A [root@mha2 backup]#mysqldump -uroot -p123456 --default-character-set=u ...