博客
关于我
openGL渲染管线复习
阅读量:692 次
发布时间:2019-03-17

本文共 1148 字,大约阅读时间需要 3 分钟。

经典的渲染管线图:

  • 在进入渲染管线前,先在cpu进行以下数据的准备工作,并将数据传输到gpu显存中:

    顶点数组对象:Vertex Array Object,VAO
    顶点缓冲对象:Vertex Buffer Object,VBO
    索引缓冲对象:Element Buffer Object,EBO或Index Buffer Object,IBO
    Uniform数据
    纹理

  • 顶点着色器(Vertex Shader)

    顶点着色器(Vertex Shader)是几个可编程着色器中的一个。在"glDrawArrays"之类的绘制方法调用时开始执行.
    输入数据为顶点属性数据,必须的输出数据为gl_Position,还可以有其它输出数据给下一个着色器.
    这里可以使用光源位置,方向,顶点位置,顶点法线,实现的冯氏光照模型的Gouraud着色(Gouraud Shading),而不是冯氏着色(Phong Shading)。由于插值,这种光照看起来有点逊色。冯氏着色能产生更平滑的光照效果,但高氏着色性能更好。如下图:

     

     

  • 图元装配(Primitive Assembly)

    将顶点着色器的顶点装配成图形,一般是三角形,点,线,貌似小众显卡也有四边形的,不过估计现在很少了.

  • 几何着色器(Geometry Shader)

    几何着色器把图元形式的一系列顶点的集合作为输入,它可以通过产生新顶点构造出新的(或是其它的)图元来生成其他形状。

  • 光栅化阶段(Rasterization Stage)

    这里它会把图元映射为最终屏幕上相应的像素,生成供片段着色器(Fragment Shader)使用的片段(Fragment)。在片段着色器运行之前会执行裁切(Clipping)。裁切会丢弃超出你的视图以外的所有像素,用来提升执行效率。

  • 片段着色器(Fragment Shader)

    片段着色器的主要目的是计算一个像素的最终颜色,这也是所有OpenGL高级效果产生的地方。通常,片段着色器包含3D场景的数据(比如光照、阴影、光的颜色等等),这些数据可以被用来计算最终像素的颜色。

  • Alpha测试和混合(Blending)

    在所有对应颜色值确定以后,最终的对象将会被传到最后一个阶段,我们叫做Alpha测试和混合(Blending)阶段。这个阶段检测片段的对应的深度(和模板(Stencil))值,用它们来判断这个像素是其它物体的前面还是后面,决定是否应该丢弃。这个阶段也会检查alpha值(alpha值定义了一个物体的透明度)并对物体进行混合(Blend)。所以,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同.

必须定义至少一个顶点着色器和一个片段着色器,几何着色器是可选的.

 

转载地址:http://ayvez.baihongyu.com/

你可能感兴趣的文章
springboot redis key乱码
查看>>
Win10禁用自带的笔记本键盘
查看>>
insmod模块的几种常见错误
查看>>
写时复制集合 —— CopyOnWriteArrayList
查看>>
什么是redis的缓存雪崩, 穿透, 击穿?
查看>>
【转载】DSP基础--定点小数运算
查看>>
idea thymeleaf页面变量报错解决
查看>>
云游戏,打响5G第一战
查看>>
Docker 拉取镜像速度太慢
查看>>
HUAWEI防火墙通过IKE方式协商IPSec隧道(采用预共享密钥认证)
查看>>
计网复习3
查看>>
JDK动态代理的实现原理
查看>>
Spring Security 架构与源码分析
查看>>
教程丨使用MeterSphere做Dubbo接口测试
查看>>
【毕设-STM32f103寄存器版本】智能防盗系统
查看>>
Vue Itea软件里直接npm run build 报错npm ERR! missing script :build
查看>>
勒索病毒Kraken2.0.7分析
查看>>
MySQL错误1366处理方法
查看>>
Error running Address localhost:1099 is already in use(已解决)
查看>>
pytorch深度学习中每个epoch运行时间的统计代码
查看>>