Opengl_入门学习分享和记录_01_Graphics Pipeline(图形渲染管线)
写在前面的废话:
这个系列拖更了很久,很大一定程度上是由于自己最近忙着高数学习和线代学习。。感觉时间特别紧缺(其实就是我太懒了)好了不废话了,总结开始。
正文开始:
首先Graphics Pipeline只接收一系列的3D坐标(x,y,z)但是每个使用者的屏幕又只能显示2D像素,比如我的显示器的分辨率(2880X1440)仅仅只存在x和y轴即长和宽。所以我们的opengl 通过接收过来的3D数据会通过Graphics Pipeline转换成有色2D屏幕上的数据。——————Graphics Pipeline的大体作用。
接下来我们来看看它究竟是由哪几部分组成的吧,首先Graphics Pipeline的输入为一个数组(顶点数组 vertex data)其中包含了之前所提到的3D坐标之后会有例子提供。然后这组数据先进入了第一阶段顶点着色器( Vertex Shader可编辑也是必须编辑,之后单独解释)接下来大家想象流水线是如何工作的,是不是上一个阶段完成后,所产出的东西继续回到流水线上然后面的阶段再做加工? 渲染流水也是如此, 从顶点着色器出来的数据是被加工过的,即顶点着色器主要的目的是把3D坐标转为另一种3D坐标(后面会解释),同时顶点着色器允许我们对顶点属性进行一些基本处理,然后作为输入传递给了形状(图元)装配阶段(Shape Assembly)。
插嘴补一句:这里引入了一个新的概念 图元, 很简单我们之前只是传入了一系列的点,我们的opengl并不知道我们想要我们怎么解释这些点存在的意义,说人话就是它还不知道我们想让这些点如何连接?画成线?点?还是三角形? 所以这里我们通过所谓的图元来告诉它该怎么画。tips:图元的选择可以有这么几种 GL_POINTS、GL_TRIANGLES、GL_LINE_STRIP
继续,从Shape Assembly阶段出来的数据,又进入了几何着色器(Geometry Shader可编辑但是不必须编辑),这个阶段所做的事情很神奇目前我还不是很理解,大概他的意思是能够生成新的顶点然后随之产生新的图元,注意这时候的图元可能与我们之前在Shape Assembly阶段所要设置的图元可能不同,然后由此产生新的图形。
接下来,集合着色器的输出会作为输入 传递给下一阶段,光栅化阶段(Rasterization Stage),这个阶段所做的事情目前任然超出了我的理解范围,大致在这里它会把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment),并且在这之后他会对裁切一部分,使得在视野之外的片段不用进入到片段着色器去上色,从而提高了整体渲染效率。
插嘴补一句:渲染一个像素点所需要的全部数据在opengl中叫一个片段。 即一个片段对应一个像素点。
当产生的片段进入了片段着色器(Fragment Shader可编辑也是必须编辑)后,它根据所提供的片段数据计算该像素点最终的颜色。 这里注意,并不一定是在片段中我们规定的颜色,由于游戏图形中会收到光的颜色,阴影,光照方向强度等影响,最终所显示在屏幕上的颜色会与我们设置的颜色有些不同,但这些都将在片段着色器中设置。
接下来,当最终像素点颜色确定后,最终的图形将会被传递给我们叫做Alpha测试和混合(Blending)阶段。 们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)。所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同。
就我目前的水平而言 最后两个阶段还不能完全理解,以上是一些自己的体会和见解,如果有大佬看到有哪些地方存在偏差或错误请直接在评论区指出!这是对我来说十分珍贵的学习机会希望大佬们不吝赐教!!
Opengl_入门学习分享和记录_01_Graphics Pipeline(图形渲染管线)的更多相关文章
- Opengl_入门学习分享和记录_00
2019.7.4 本着对游戏创作的热情,本人初步了解了一部分的unity引擎的使用,也学习了一点C#可是越学习unity我就反而对引擎内部感兴趣(不知道有没有一样的朋友=,=). 接着了解到了open ...
- Opengl_入门学习分享和记录_02_渲染管线(一)顶点着色器&片段着色器
写在前面的废话:今天俺又来了哈哈,真的好棒棒! 今天的内容:之前我们大概描述了,我们自己定义的顶点坐标是如何被加载到GPU之中,并且介绍了顶点缓冲对象VBO用于管理这一块内存.今天开始详细分析它的具体 ...
- Opengl_入门学习分享和记录_番外篇01(MacOS上如何在Xcode 开始编辑OpenGL)
写在前面的废话: 哈哈 ,我可真是勤勉呢,今天又来更新了,这篇文章需要大家接着昨天的番外篇00一起食用! 正文开始: 话不多说,先看代码. 这里主要全是使用的glfwwindowhint 这个函数,他 ...
- Opengl_入门学习分享和记录_03_渲染管线(二)再谈顶点着色器以及顶点属性以及属性链接
---恢复内容开始--- 写在前面的废话:岂可修!感觉最近好忙啊,本来今天还有同学约我出去玩的.(小声bb) 正文开始:之前已经编译好的着色器中还有一些问题,比如 layout(location=0) ...
- Opengl_入门学习分享和记录_02_渲染管线(一)顶点输入
现在前面的废话:最近好事不断!十分开心!生活真美好! 好了今天要梳理一下,顶点输入的具体过程,同样也是渲染管线中的第一个阶段的详细过程的介绍.之前介绍过,OpenGL操作的是一组3D坐标,所以我们的输 ...
- Opengl_入门学习分享和记录_番外篇00(MacOS上如何给Xcode 适配openGL)
现在前面的废话:哇这次没有鸽太久,突然想起来还没有介绍如何适配opengl的衍生库.今天一并介绍下,同样看时间允不允许,让我再把之前学到的一些东西再次总结一遍. 正文开始: 首先大家要知道我们的Ope ...
- Opengl_入门学习分享和记录_03_渲染管线(三)借助顶点数组对象VAO提高绑定属性效率
目前我们已经知道了,如果想要顶点着色器解释理解我们的输入数据,就必须要按照以下繁琐的步骤:第一步:将输入的数据复制一份到缓冲区,供OpenGL使用.而这块新出现的区域由VBO管理和表示.(若有多个输入 ...
- Redis入门学习(学习过程记录)
Redis(入门笔记) 学习一个大的技术点,然后顺带着就把这个技术点的面试题给学习了. 学习完一个技术后,如果面试题还不能够解答的话,只能说明学的不精,需要查漏补缺. 下一个学习的方向:Redis-非 ...
- Bootstrap入门学习笔记(只记录了效果)
基本头文件 <!DOCTYPE html> <html> <head> <title>Bootstrap 实例</title> <me ...
随机推荐
- 屏蔽谷歌浏览器"请停用以开发者模式运行的扩展程序"提示
目标: 对于强迫症患者那是相当难受~~~ 解决方案: 1:进入chrome://extensions/ 右上角开启开发者模式 点击打包扩展程序: 2:扩展程序目录为选择插件(*.crx解压后)的根目录 ...
- C#中的委托和事件(上篇)
每一个初学C#的程序猿,在刚刚碰到委托和事件的概念时,估计都是望而却步,茫然摸不到头脑的.百度一搜,关于概念介绍的文章大把大把的,当然也不乏深入浅出的好文章.可看完这些文章,大多数新手,估计也只是信心 ...
- c++学习书籍推荐《C++ Primer(中文版)(第5版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(中文版)(第5版)>编辑推荐:一书在手,架构无忧:三十位一线架构师真知实践:百位架构师献计献策:十万文字尽显架构精华. 媒 ...
- 5. xadmin 后台搭建
要维护他人产权,就不喽了,直接飞机 Django1.11.11使用xadmin的方法(一: 快速安装篇):https://www.jianshu.com/p/bcb74595213e Django1. ...
- 教你发布vue+.netCore项目到服务器
最近一直在做项目,发布部署的事情都是同事或者老大做的,无奈什么事都要自己尝试经历后才能记住,所以发布的事情轮到我了,由于是第一次发布部署项目到一个新的服务器环境,难免会遇到各种各样的问题,总结下来,希 ...
- JavaScript入门小案例
笔记: <!-- JavaScript的特点: 1.基于对象和事件驱动 JavaScript把HTML页面中的每一个元素都当做一个对象来处理,并且这些对象都具有层次关系, 像一颗倒立的树,这种关 ...
- python爬虫笔记之用cookie访问需要登录的网站
目标:用cookie访问一个需要登录的网站 如图,直接访问会跳转到登录页面,提示登录. 运行结果: 直接在浏览器上输入该url,网站立马跳转到登录页面. 方法: 1.先手动登录,通过抓包获取coo ...
- Sequencial Minimal Optimization-a Fast Alg for Training SVM(译文)
- HttpWebRequest的使用之Get和Post的差别(C#)
这两天做的是通过一个HttpWebRequest将采集地址发送到服务端,服务端会返回一个JSON格式的字符串,然后我这边再对这个JSON进行反序列化,得到我想要的数据.在这篇文章里我简单介绍一下Htt ...
- 【Arduino】66种传感器系列实验(1)---干簧管传感器模块
37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和各种模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里 ...