OpenGL 渲染架构
2020-07-08 本文已影响0人
爱闹的凡
OpenGL渲染架构
3344530-39c8b95f0143278f.png1、渲染流程
1、设置视口顶点数据和其他参数
2、顶点数据数组对象或者顶点缓冲区数组对象提供的每个顶点都执行一边顶点着色器,主要两种方式传值给顶点着色器:Uniforms(一种变量类型)在每个顶点都保持一致,Attrbutes每个顶点都不同
3、顶点着色器的下一个阶段就是图元装配,图元是三角形、直线、点等几何对象
4、光栅化是将图元转化成一组二维片段的过程,然后这些片段由片段着色器处理
5,裁剪,如果该片段位于裁剪区外,则被抛弃
6、片元着色器将对应的栅格填充为具体的颜色,渲染图像
2、参数类型
1、attrubutes属性只能传入顶点着色器,不能直接传递到片元着色器,只能通过GLSL代码简介传递
顶点数据
纹理数据
光照法线
颜色数据
2、uniforms值可以传入顶点着色器,片元着色器
3、参数的使用
顶点着色器
我们可以通过attrubutes获取到顶点数据,通过uniforms获取到mvp矩阵,再进行运算得到最终的顶点坐标。
gl_Position = M_pro * M_view * M_model * V_local
片元着色器
比如在处理视频帧时,一般会使用YUV格式。要渲染到屏幕上需要将YUV格式转换为RGB格式。在片元着色器中,通过YUV数据进行矩阵运算就可以得到具体的RBG颜色值了。Alpha通道直接赋值为1.0
RGB = YUV * 转换矩阵
纹理
像素数据。片元着色器中,可以通过纹理坐标获取到对应的颜色值。如果对得到的颜色值进行处理,就可以得到“滤镜”效果。
4、基本图元
3344530-70a1f32f35daffd3.png图元 | 描述 |
---|---|
GL_POINTS | 每个顶点在屏幕上都是单独点 |
GL_LINES | 每⼀对顶点定义⼀个线段 |
GL_LINE_STRIP | 一个从第⼀个顶点依次经过每⼀个后续顶点而绘制的线条 |
GL_LINE_LOOP | 和GL_LINE_STRIP相同,但是最后⼀个顶点和第⼀个顶点连接起来了 |
GL_TRIANGLES | 每3个顶点定义⼀个新的三角形 |
GL_TRIANGLE_STRIP | 共⽤一个条带(strip)上的顶点的一组三⻆形 |
GL_TRIANGLE_FAN | 以⼀个圆点为中⼼呈扇形排列,共⽤相邻顶点的⼀组三⻆形 |