美文网首页
NO.7 - OpenGL渲染架构

NO.7 - OpenGL渲染架构

作者: z夜流星 | 来源:发表于2020-07-08 01:17 被阅读0次

1.OpenGL的渲染架构

OpenGL的渲染架构
  • Client:是指常见的iOS代码和OpenGL API方法,这部分是在CPU中运行
  • Server:是指OpenGL底层的渲染等处理,是运行在GPU中的
渲染流程:

1.设置顶点数据和其他参数。
2.在顶点着色器中进行运算得到裁剪坐标。
3.细分着色器、几何着色器,不可自定义,跳过。
4.图元设置,根据设置构成点、线、三角形。
5.裁剪,裁剪掉超出显示区域的部分。
6.光栅化, 将图源栅格化为一个个的像素点。
7.片元着色器,将对应的栅格(像素)填充为具体的颜色。
8.渲染图像。

数据传递的三种通道

Attributes

  • Attributes通道只能将数据直接传递到顶点着色器,不能直接传递到片元着色器,但是可以通过顶点着色器间接传递给片元着色器(GLSL代码间接传递)。
  • 通过Attributes传递的通常是经常发生变化的数据,例如颜色、顶点等。
  • Attribute主要传递这些参数:颜色数据、顶点坐标、纹理坐标、光照法线等。

Uniform

  • Uniform通过既可以传递到顶点着色器,也可以传递到片元着色器。
  • Uniform中传递的通常是比较统一的批次数据,不经常发生变动的数据。

Texture Data

  • Texture Data同Unoform一样,可以将数据传递到顶点和片元着色器。
  • 由于顶点着色器主要是处理顶点数据的,我们将纹理数据传过去并没有多大的意义。而纹理的处理的逻辑主要是在片元着色器中进行的。

2.基本图元

基本图元
基本图元说明
OpenGL三⻆形环绕⽅式

在默认情况下,OpenGL认为具有逆时针⽅向环绕的多边形为正⾯。

GL_CW:顺时针环绕的多边形为正⾯
GL_CCW:逆时针环绕的多边形为正⾯
glFrontFace(GL_CW);

3. 存储着⾊器

3.1 初始化
// GLShaderManager 的初始化
GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();
3.1不同的存储着⾊器

单元着色器

GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY, 
                               GLfloat vColor[4]);

参数1: 存储着⾊器种类-单元着⾊器
参数2: 颜⾊值
使⽤场景:绘制默认OpenGL 坐标系(-1,1)下图形。 图形所有片段都会以⼀种颜⾊填充

平⾯着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_FLAT,
                                 GLfloat mvp[16],
                                 GLfloat vColor[4]);

参数1: 存储着⾊器种类-平⾯着⾊器
参数2: 允许变化的4*4矩阵
参数3: 颜⾊色值
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。

上色着色器

GLShaderManager::UserStockShader(GLT_SHADER_SHADED,
                                 GLfloat mvp[16]);

参数1: 存储着⾊器种类-上⾊着⾊器
参数2: 允许变化的4*4矩阵
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。颜色将会平滑地插入到顶点之间,称为平滑着色

默认光源着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,
                                 GLfloat mvMatrix[16],
                                 GLfloat pMatrix[16],
                                 GLfloat vColor[4]);

参数1: 存储着⾊器种类-默认光源着⾊器
参数2: 模型44矩阵
参数3: 投影4
4矩阵
参数4: 颜⾊值
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器会使绘制的图形产生阴影和光照的效果。

点光源着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,
                                 GLfloat mvMatrix[16],
                                 GLfloat pMatrix[16],
                                 GLfloat vLightPos[3],
                                 GLfloat vColor[4]);

参数1: 存储着⾊器种类-点光源着⾊器
参数2: 模型44矩阵
参数3: 投影4
4矩阵
参数4: 点光源的位置
参数5: 漫反射颜⾊值
使⽤场景:在绘制图形时, 可以应用变换(模型/投影变化)。这种着⾊器会使绘制的图形产⽣阴影和光照的效果。它与默认光源着⾊器⾮常类似,区别只是光源位置可能是特定的

纹理替换矩阵着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,
                                 GLfloat mvMatrix[16],
                                 GLint nTextureUnit);

参数1: 存储着⾊器种类-纹理替换矩阵着⾊器
参数2: 模型4*4矩阵
参数3: 纹理单元
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵,使⽤纹理单元来进⾏颜⾊填充。其中每个像素点的颜⾊是从纹理中获取。

纹理调整着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,
                                 GLfloat mvMatrix[16],
                                 GLfloat vColor[4],
                                 GLint nTextureUnit);

参数1: 存储着⾊器种类-纹理调整着⾊器
参数2: 模型4*4矩阵
参数3: 颜⾊值
参数4: 纹理单元
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵。着⾊器将⼀个基本⾊乘以⼀个取⾃纹理单元nTextureUnit 的纹理,将颜⾊与纹理进⾏颜⾊混合后才填充到⽚段中。

纹理光源着⾊器

GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,
                                 GLfloat mvMatrix[16],
                                 GLfloat pMatrix[16],
                                 GLfloat vLightPos[3],
                                 GLfloat vBaseColor[4],
                                 GLint nTextureUnit);

参数1: 存储着⾊器种类-纹理光源着⾊器
参数2: 模型44矩阵
参数3: 投影4
4矩阵
参数4: 点光源位置
参数5: 颜⾊值
参数6: 纹理单元
使⽤用场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵,着⾊器将⼀个纹理通过漫反射照明计算进⾏调整(相乘)。

相关文章

  • NO.7 - OpenGL渲染架构

    1.OpenGL的渲染架构 Client:是指常见的iOS代码和OpenGL API方法,这部分是在CPU中运行 ...

  • OpenGL渲染架构

    OpenGL的渲染架构图 OpenGL渲染主架构 OpenGL渲染架构分为客户端(Client)和服务端(Serv...

  • OpenGL/OpenGL ES(二) 渲染架构

    1. 渲染架构图 上图是 OpenGL 渲染的大致架构,从图中我们可以看出,OpenGL 渲染架构分为Client...

  • OpenGL渲染架构以及三种数据传递方式

    一、OpenGL渲染架构 了解OpenGL渲染架构对我们学习OpenGL有非常重要的作用。话不多说,直接上图: 图...

  • 3. OpenGL渲染基础

    一、OpenGL渲染架构图 1. OpenGL渲染架构图: 2. 数据传递: 从上图可以看出OpenGL的数据传递...

  • OpenGL渲染架构

    OpenGL渲染架构 OpenGL的渲染架构image.png 渲染流程:设置顶点数据和其他参数。在顶点着色器中进...

  • 3、OpenGL渲染架构

    OpenGL渲染架构 渲染架构图 主要分为两大模块 Client:是指常见的ios代码和OpenGL API方法。...

  • openGL着色器的渲染流程

    openGL渲染架构 上图为openGL渲染架构图 Attributes属性 属性就是对每一个顶点都要做改变的数据...

  • OpenGL笔记二:OpenGL 渲染流程及投影

    前言 期待您移步上篇:OpenGL笔记一:专业名词 OpenGL渲染架构 OpenGL 渲染流程分为两个部分:Cl...

  • OpenGL渲染架构与传值方式

    OpenGL渲染架构 了解OpenGL渲染架构 client和server并不是我们平时开发时常说的客户端和服务器...

网友评论

      本文标题:NO.7 - OpenGL渲染架构

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