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: 投影44矩阵
参数4: 颜⾊值
使⽤场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器会使绘制的图形产生阴影和光照的效果。
点光源着⾊器
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,
GLfloat mvMatrix[16],
GLfloat pMatrix[16],
GLfloat vLightPos[3],
GLfloat vColor[4]);
参数1: 存储着⾊器种类-点光源着⾊器
参数2: 模型44矩阵
参数3: 投影44矩阵
参数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: 投影44矩阵
参数4: 点光源位置
参数5: 颜⾊值
参数6: 纹理单元
使⽤用场景:在绘制图形时, 可以应⽤变换(模型/投影变化)。这种着⾊器通过给定的模型视图投影矩阵,着⾊器将⼀个纹理通过漫反射照明计算进⾏调整(相乘)。













网友评论