应用阶段--->几何阶段---->光栅化阶段---->逐片元操作----->后处理
1,应用阶段:粗粒度剔除,进行渲染设置,准备基本数据,输出到几何阶段。
2,几何阶段:顶点着色器,曲面细分,几何着色器,顶点裁剪,屏幕映射。
3,光栅化阶段:三角形(点/线)设置,三角形(点/线)遍历,片元着色器。
4,逐片元操作:裁剪测试,透明度测试,深度测试,模板测试,混合。
5,后处理。
应用阶段:Application stage
3个主要任务(这个阶段以开发者为主导,由CPU来实现。):
1,准备好场景数据。如,摄像机位置,视椎体,场景中包含的模型,光源etc。
2,粗粒度(Culling)剔除。为了提高渲染性能。
3,设置好每个模型的渲染状态。(渲染状态包括但不限于使用texture--diffuse, reflection etc. Bipmap,Shader)
这个阶段最重要的输出是渲染所需的几何信息-----渲染图源(Rendering Primitives)
几何阶段:Geometry Stage
顶点着色器:计算顶点光照(要计算顶点光照,就需要知道光源的位置,朝向以及摄 像机的位置和朝向,顶点当前世界的位置。当前顶点位置又要知道顶点在模型空间的 位置,以及模型本身的PSR)。
曲面细分着色器: 需要根据现有的顶点来生产更多的顶点。
几何着色器:通过现有图元来做一些几何方面的操作,生成更多的顶点和图元。
例如,对现有的图元所在的平面生成法线。
顶点裁剪:裁剪掉屏幕以外的顶点。
屏幕映射:把顶点从3D坐标空间转换到2D坐标空间。
光栅化设置:Rasterizer Stage
三角形设置(triangle setup):光栅化的第一个流水线阶段。
这个阶段会计算光栅化一个三角网格所需的信息。上一个阶段输出的都是三角网格的顶点。即得到的是三角网格每条边的两个端点。如果要得到整个三角网格对像素的覆盖情况,就必须计算每条边上的像素坐标。为了能够计算便捷像素的坐标信息,就需要得到三角形便捷的表示方式。这个计算三角网格标识数据的过程就是三角形设置。
三角形遍历(TriangleTraversal):检查每个像素是否被一个三角网格覆盖,如果被覆盖,就会生成一个片元(fragment),这样一个找到哪些像素被三角网格覆盖的过程就是三角形遍历,也被称为扫描变换。
这一步的输出就是德奥一个片元序列。但是片元并不是真正意义上的像素。而是包含了很多状态的集合,这些状态用于计算每个像素的最终颜色。这些 状态包括但不限于他的屏幕坐标,深度信息,以及其他从几何阶段输出的顶点信息。如发现,纹理坐标等。
片元着色器(Fragment Shader):是另一个非常重要的可编程着色器阶段。
光栅化阶段世界上不会影响屏幕上每个像素的颜色值,而是会产生一些列的数据信息,用来表述一个三角网格是怎样覆盖每个像素的。每个片元负责存储这样的一些列数据。
这个阶段可以王城很多重要的渲染技术。最重要的技术之一的就是纹理采样。为了在片元着色器中进行纹理采样,同在会在顶点着色器阶段输出每个顶点对应的纹理坐标。然后经过光栅化阶段对三角网格的三个顶点对应的纹理坐标进行插值后,就可以得到其覆盖的片元纹理坐标。
逐片元操作:在OpenGL里成为逐片元操作(Per-Fragment Operations)
在DirectX里,这个步骤被称为输出合并阶段(Output-Merger)
所以,这个步骤就是对通过测试的片元合并的过程。
逐片元操作就是通过对像素点做裁剪,透明度,深度,模板等测试后,通过测试的片 元得以保留下来,没有通过的则丢弃掉。把通过测试的片元颜色进行一个混合操作从 而得到像素点最终输出的颜色。
逐片元操作完成后,得到一个类似贴图的数据保存在内存里。后处理,就是对这个数据做一些列如模糊,景深,高光等处理。
从几何阶段到逐片元操作,这整个流程就是GPU渲染管线。
----------------------------------------
顶点着色是可编程的。
从顶点着色到投影的步骤,完成了从顶点空间到投影空间的过程。(投影是GPU自动完成)
裁剪:视椎体裁剪---CVV
Vertex Shader,GPU渲染管线第一个阶段,输入来自于CPU。输入进来的每一个顶点,都会调用一次顶点着色器。顶点着色器本身不可以创建或者销毁任何顶点,且无法得到顶点之间的关系。例如,通过顶点着色器,无法得知两个顶点是否属于同一个三角网格。
顶点着色器的主要工作:坐标变换和追顶点光照
模型变换,视图变换,投影变换,对应的就是MVP矩阵。unity的顶点着色器中,顶点是会从模型坐标新转换到投影坐标系。
可选步骤
可选步骤
裁剪不可通过编程来控制,但是可以自定义裁剪来进一步配置。
场景渲染到一个窗口上,窗口的范围从最小串口坐标(x1,y1)到最大的窗口坐标(x2,y2)。
其中x1<x2,y1<y2.由于输入的坐标范围在-1到1.所以这个过程实际是一个缩放的过程。
屏幕坐标系(Screen Coordinate)和z坐标一起构成了窗口坐标系(Window Coordinate)。这些值会一起传递到光栅化阶段。
OpenGL和DirectX之间的差异
如果得到的图像是倒转的,有可能是因为没有考虑到OpenGL和DirectX之间的差异。
参考前文:R绘图笔记 | R语言绘图系统与常见绘图函数及参数关于绘图图,前面介绍了一些:R绘图笔记 | 一般的散点图绘制R绘图笔记 | 柱状图绘制R绘图笔记 | 直方图和核密度估计图的绘...
make的时候报错:dereferencingpointer to incomplete type。这个报错的意思是,试图访问该pointer指向的变量,却发现该变量是一个不完整的类型,多出错于访问结构体联合体的成员。最终的结论是,没有结构体的定义!
线程安全同步与锁二元信号量:只有两种形态,占用和非占用。信号量:对于允许多个线程并发访问的资源,多元信号量是一个很好的选择。它会进行如下操作:如果信号量的值小于0,则进入等待状态,负责继续进行。将信号量的值减1; 访问完资源后,线程释放信号量,进行如下操作:将信号量的值加1;如果信号量的值小于1,唤醒一个等待中的线程。互斥量:和二元信号量很类似,但和信号量不同的是,信号量在整个系统可以
sld_body属性值:<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" version="1.0.0"><NamedLayer>..
我们发现开启VPN的windows vps有时候重启后,能ping通一会,然后会突然ping不通。无法远程桌面。 我们分析后,发现这因为workstation没有自动启动而导致VPN的路由服务无法正常工作,导致网络端口,然后就无法ping通了,怎么办? 首先,我们需要重启vps,这时网络是通的,赶紧远程桌面上去,重新启动 workstation 和 vpn。 如下图:
您所在位置:网站首页 > 海量文档 > 计算机 > Python《Python程序设计方案》题库.docx66页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。2.该文档所得收入(下载+内容+预览三)归上传者、原创者。3.登...
出发点:ipc提供监控软件SDK比较duo
表格代码 { field: "imgurl", title: "图片", templet: function (item) { return '<img onclick="showimg(this)" id="driimg...
所需要的软件: texlive2017、SumatralPDF、Sublime Text,这三个软件可以通过我的百度云中下载,链接为:https://pan.baidu.com/s/1AzUHsND1UcYWK1-PAqf0Yw,密码为: l9qb1. 安装SumatralPDF: 直接点击安装就可以,尽量不要改路径,因为后面要进行路径匹配。 2. 安装texlive20...
// 一级缓存 缓存完成初始化的bean 完成整个生命周期private final Map<String, Object> singletonObjects = new ConcurrentHashMap(256);// 三级缓存 缓存bean工厂private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap(16);// 二级缓存 缓存早期暴露的bean 还未完成生命周期
看到这样一篇文章,觉得蛮有意思,转载于此:http://www.boydwang.com/2013/12/build-your-raspberrypi-as-a-media-center/ 今天收到了小派,UK产的绿板子,还配了个透明盒子,装在里面闪亮亮的很好看,而且只有卡片大小,寻思着用它做什么好呢?想来想去,看到人家拿小派作家庭媒体中心,还有人拿它当下载机,于是就萌生了一个家庭媒体中心...
简介OpenGL (Open Graphics Library)是⼀一个跨编程语⾔言、跨平台的编程图形程序接⼝,它将计算机的资源抽象称为一个个OpenGL的对象,对这些资源的操作抽象为一个个的OpenGL指令OpenGL ES (OpenGL for Embedded Systems)是 OpenGL 三维图形 API 的⼦集,针对手机、 PDA和游戏主机等嵌⼊入式设备⽽而设计,去除了许多不必要和性能较低的API接⼝DirectX 是由很多API组成的,DirectX并不是一个单纯的图形API. 最重