美文网首页
1-2.着⾊器渲染过程

1-2.着⾊器渲染过程

作者: Pufus | 来源:发表于2020-09-23 17:02 被阅读0次
OpenGL-LOGO.jpg

渲染
将图形/图像数据转换成2D空间图像操作叫做渲染(Rendering)
图⽚/按钮/视频-->显示绘制到屏幕过程,解码图⽚-->渲染

顶点数组( VertexArray ) 和 顶点缓冲区( VertexBuffer )
顶点指的是我们在绘制一个图形时它的顶点位置数据.⽽这个数据可以直接存储在数组中或者将其缓存到GPU显存中.
开发者可以选择设定函数指针,在调用绘制⽅法的时候,直接由内存传入顶点数据,也就是说这部分数据之前是存储在内存当中的,被称为顶点数组\color{rgb(255, 127, 80)}{(内部含有顶点数据-->存在于内存中顶点缓存区)}
⽽性能更高的做法是提前分配一块显存,将顶点数据预先传入到显存当中。这部分的显存就被称为顶点缓冲区

着⾊器程序Shader
全⾯的将固定渲染管线架构变为了可编程渲染管线。因此,OpenGL在实际调用绘制函数之前,还需要指定一个由shader编译成的着色器程序。
常见的着色器主要有顶点着⾊器(VertexShader),⽚段着⾊器 (FragmentShader)/像素着⾊器(PixelShader),⼏何着⾊器 (GeometryShader),曲⾯细分着⾊器(TessellationShader)

着色器的分类
1.顶点着色器(必要):是最初用来处理顶点坐标的,一般会对坐标做一些计算
2.细分着色器(可选):描述物体的形状,在管线中生成新的几何体处理(平顺)模型生成最终形态
3.几何着色器(可选):是对原坐标进行一些修改,感觉适用于一些特效
4.片元着色器(必要):是对图形进行涂色,并最终输出
其中顶点着色器片元着色器是我们必须要使用的,然而细分着色器和几何着色器我们是可选的,一般用的很少。

顶点着⾊器 VertexShader
-\color{rgb(255, 127, 80)}{⼀般用来处理图形每个顶点变换(旋转/平移/投影等)}

  • 顶点着⾊器是OpenGL中⽤于计算顶点属性的程序。顶点着⾊器是逐顶点运算的程序,也就是说每个顶点数据都会执行一次顶点着⾊器,当然这是并行的,并且顶点着⾊器运算过程中⽆法访问其他顶点的数据

片元着⾊器程序 FragmentShader
\color{rgb(255, 127, 80)}{一般⽤来处理图形中每个像素点颜⾊计算和填充}
• ⽚段着⾊器是OpenGL中⽤于计算片段(像素)颜色的程序。⽚段着⾊器是逐像素运算的程序,也就是说每个像素都会执行一次⽚段着⾊器,当然也是并行的

光栅化Rasterization
\color{rgb(255, 127, 80)}{是把顶点数据转换为⽚元的过程},具有将图转化为⼀个个栅格组成的图象的作用,特点是每个元素对应帧缓冲区中的⼀像素。
• 光栅化其实是\color{rgb(255, 127, 80)}{一种将几何图元变为二维图像的过程}。该过程包含了两部分的工作。
第⼀部分⼯工作:决定窗口坐标中的哪些整型栅格区域被基本图元占用;
第二部分工作:分配⼀个颜⾊值和一个深度值到各个区域。
• 光栅化过程产⽣的是片元

OpenGL在处理理shader时,和其他编译器一样。通过编译、链接等步骤,⽣成了着⾊器程序(glProgram),着⾊器程序同时包含了顶点着⾊器和⽚段着⾊器的运算逻辑。在OpenGL进行绘制的时候,⾸先由顶点着⾊器对传入的顶点数据进行运算。再通过图元装配,将顶点转换为图元。然后进⾏光栅化,将图元这种⽮量图形,转换为栅格化数据。最后,将栅格化数据传入片段着⾊器中进行运算。⽚段着⾊器会对栅格化数据中的每⼀个像素进行运算,并决定像素的颜⾊


着色器渲染过程图.png

1.创建顶点
2.然后通过顶点着色器渲染
3.连接信息条,通过各个顶点连接成几何图形
4.光栅化:其实是确定像素点在屏幕上绘制的位置,然后这些片段由片元着色器处理(输入给片元着色器)
5.光栅化阶段生成每个片元执行这个着色器
6.最终呈现出图形

相关文章

网友评论

      本文标题:1-2.着⾊器渲染过程

      本文链接:https://www.haomeiwen.com/subject/fveoyktx.html