美文网首页
OpenGL渲染架构

OpenGL渲染架构

作者: AcmenL | 来源:发表于2020-07-13 22:20 被阅读0次

OpenGL渲染架构

OpenGL渲染架构

在GPU上的渲染流程

渲染流程

GPU渲染流程:

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

1、模块

分为客户端和服务端,与我们通常定义的有差别

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

2、数据传递

数据传递通道有三种 Attribute、Uniform、Texture Data。

通道名称 可传入着色器 特点
Attributes 顶点着色器 1、只能将数据直接传递到顶点着色器,不能直接传递到片元着色器,但是可以通过顶点着色器间接传递给片元着色器。2、传递的通常是经常发生变化的数据,例如颜色数据、顶点数据、光照法线、纹理坐标
Uniforms 顶点着色器、片元着色器 传递的通常是比较统一的批次数据,不经常发生变动的数据
Texture Data 顶点着色器、片元着色器 顶点着色器主要是处理顶点数据的,我们将纹理数据传过去并没有多大的意义。而纹理的处理的逻辑主要是在片元着色器中进行的

3、投影方式

正投影(Orthographic Projection):物体在屏幕上的大小和实际大小相同

GLFrumstum::SetOrthographic(GLfloat xMax,GLfloat yMin,GLfloat yMax,GLfloat zMin,GLfloat zMax);

透视投影(Perspective Projection):远处的物体看上去比近处的物体更小一些,在模拟和3D动画中,这种投影能够获得最大程度的逼真感。

GLFrustum::SetPerspective(float fFov,float fAspect,float fNear,float fFar);
参数:
fFov:垂直方向上的视场角度
fAspect:窗口的宽度与高度的纵横比
fNear:近裁剪面距离
fFar:远裁剪面距离

纵横比 = 宽(w)/高(h)

4、基本图元

基本图元

5、存储着色器

存储着色器是由GLShaderManager来进行管理的,试用前必须要先初始化

// GLShaderManager 的初始化 
GLShaderManager shaderManager;
shaderManager.InitializeStockShaders();
1、单元着色器:最简单的一种着色器
//着色器所有的方法名字都是用 UserStockShader
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);
参数1: 存储着色种类-单元着色器
参数2: 颜色

使用场景:绘制默认OpenGL坐标系(-1,1)下图形,图形所有片段都会以一种颜色填充
2、平面着色器: 它是用的最多的一种
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],GLfloat vColor[4]);
参数1:存储着色器种类-平面着色器
参数2:允许变化的4*4矩阵
参数3:颜色

使用场景:在绘制图形时,可以应用变换(模型/投影变化).
3、上色着色器
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);
参数1:存储着色器种类-上色着色器
参数2:允许变化的4*4矩阵

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 颜色将会平滑地插入到顶点之间称为平滑着色.
4、默认光源着色器
GLShaderManager::UserStockShader(GLT_SHADER_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);
参数1:存储着色器种类-默认光源着色器
参数2:模型4*4矩阵
参数3:投影4*4矩阵
参数4:颜色值

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器会使绘制的图形产生阴影和光照的效果.
5、点光源着色器
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);
参数1:存储着色器种类-点光源着色器
参数2:模型4*4矩阵
参数3:投影4*4矩阵
参数4:点光源的位置
参数5:颜色值

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器会使绘制的图形产生阴影和光照的效果.它与默认光源着色器非常相似,区别只是光源位置可能是特定的。
6、纹理替换矩阵着色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);
参数1:存储着色器种类-点光源着色器
参数2:模型4*4矩阵
参数3:纹理单元

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器通过给定的模型试图投影矩阵。使用纹理单元来进行颜色填充,其中每个像素点的颜色是从纹理中获取的。
7、纹理调整着色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);
参数1:存储着色器种类-点光源着色器
参数2:模型4*4矩阵
参数3:颜色值
参数4:纹理单元

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器通过给定的模型试图投影矩阵。着色器将一个基本色乘以一个取自纹理单元nTextureUnit的纹理。将颜色与纹理进行混合后才填充到片段中。
8、纹理光源着色器
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFE,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
参数1:存储着色器种类-纹理光源着色器
参数2:模型4*4矩阵
参数3:投影4*4矩阵
参数4:点光源位置
参数5:颜色值(几何图形的基本色)
参数6:纹理单元

使用场景:在绘制图形时,可以应用变换(模型/投影变化) 这种着色器通过给定的模型试图投影矩阵。着色器将一个纹理通过漫反射照明计算进行调整(相乘)。

相关文章

  • 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并不是我们平时开发时常说的客户端和服务器...

  • OpenGL 渲染

    OpenGL 渲染 OpenGL 渲染架构 client 代表就是客户端类似于 iOS/安卓 server 代表后...

网友评论

      本文标题:OpenGL渲染架构

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