OpenGL

OpenGL渲染架构

2020-07-07  本文已影响0人  iOSer_jia

1.OpenGL渲染架构

OpenGL渲染架构

Attribute:只能传入顶点着色器,一般传递会频繁改变的值,比如顶点数据、纹理坐标、光照法线、颜色数据。
Uniforms:可以传入到顶点着色器和片元着色器,一般传递不变的值,比如旋转矩阵、位移矩阵。
Texture Data:纹理数据,可以传递到顶点着色器和片元着色,一般传递到片元着色器。

2.基本图元

基本图元
图元 描述
GL_POINTS 每个顶点在屏幕上都是单独
GL_LINES 每一对顶点定义一个线段
GL_LINE_STRIP 一个从第一个顶点依次经过每一个后续顶点而绘制的线条
GL_LINE_LOOP 和GL_LINE_STRIP相同,但是最后一个顶点和第一个顶点连接起来了
GL_TRIANGLES 每3个顶点定义一个新的三角形
GL_TRIANGLE_STRIP 三角形带,共用上一个三角形最后两个顶点
GL_TRIANGLE_FAN 三角形环,以一个圆点为中心呈扇形排列

OpenGL最光栅化最喜欢的图形--三角形,我们将三个顶点坐标在坐标轴按照逆时针环绕的称为正三角,反之称为反三角。
在默认情况下,OpenGL 认为具有逆时针⽅方向环绕的多边形为正面.
可以通过glFrontFace(GL_CW)将顺时针方向环绕的多边形改为反面

3.投影

设置正投影

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

设置平行投影

// fFov: 垂直方向上的市场角度
// fAspect: 窗口的宽度和高度的纵横比(w/h)
// fNear: 近裁截面的距离
// fFar: 远裁截面的距离
GLFrumstum::SetPerspective(float fFov, float fAspect, float fNear, float fFar);

4.固定着色器

初始化

GLShaderManager shaderManager;
shaderManager.InitializeStockShaders()

单元着色器

一般用于所有片段都以一种颜色填充的情况。

// param1: 固定着色器种类
// param2: 颜色
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);

平面着色器

在绘制图形时,可以应用变换。

// param1:固定着色器种类
// param2:允许变化的4*4矩阵
// 颜色
GLShaderManager::UserStockShader(GLT_SHADER_FLAT,GLfloat mvp[16],,GLfloat vColor[4]);

上色着色器

与平面着色器类似,颜⾊将会平滑地插⼊入到顶点之间,称为平滑着色。

// param1: 固定着色器种类
// parma2: 允许变化的4*4矩阵
GLShaderManager::UserStockShader(GLT_SHADER_SHADED,GLfloat mvp[16]);

默认光源着色器

这种着⾊器器会使绘制的图形产⽣阴影和光照的效果。

// param1: 固定着色器种类
// param2: 模型4*4矩阵
// param3: 投影4*4矩阵
// param4: 颜色
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vColor[4]);

点光源着色器

这种着色器会使绘制的图形产⽣阴影和光照的效果.它与默认光源着⾊器器非常类似,区别只是光源位置可能是特定的.

// param1: 固定着色器种类
// param2: 模型4*4矩阵
// param3: 投影4*4矩阵
// param4: 点光源位置
// param5: 颜色值
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIEF,GLfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vColor[4]);

纹理替换矩阵着色器

这种着⾊色器通过给定的模型视图投影矩阵.使⽤纹理单元来进行颜⾊填充.其中每个像素点的颜⾊色是从纹理中 获取.

// param1: 固定着色器种类
// param2: 模型4*4矩阵
// parms3: 纹理单元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE,GLfloat mvMatrix[16],GLint nTextureUnit);

纹理调整着色器

这种着⾊色器通过给定的模型视图投影矩阵. 着⾊器将⼀个基本⾊乘以一个取自纹理单元nTextureUnit的纹 理.将颜色与纹理进行颜⾊混合后才填充到片段中.

// param1: 固定着色器种类
// param2: 模型4*4矩阵
// param3: 颜⾊色值
// param4: 纹理单元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE,GLfloat mvMatrix[16],GLfloat vColor[4],GLint nTextureUnit);

纹理光源着色器
这种着⾊器通过给定的模型视图投影矩阵. 着色器将一个纹理通过漫反射照明计算进行调整(相乘).

// param1: 固定着色器种类
// param2: 模型4*4矩阵
// param3: 投影4*4矩阵
// param4: 点光源位置
// param5: 颜色值
// param6: 纹理单元
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIEF,G Lfloat mvMatrix[16],GLfloat pMatrix[16],GLfloat vLightPos[3],GLfloat vBaseColor[4],GLint nTextureUnit);
上一篇 下一篇

猜你喜欢

热点阅读