1.OpenGL 渲染架构图
OpenGL渲染架构图.png渲染流程:
1.设置顶点数据和其他参数。
2.在顶点着色器中进行运算得到裁剪坐标。
3.细分着色器、几何着色器,不可自定义,跳过。
4.图元设置,根据设置构成点、线、三角形。
5.裁剪,裁剪掉超出显示区域的部分。
6.光栅化, 将图源栅格化为一个个的像素点。
7.片元着色器,将对应的栅格(像素)填充为具体的颜色。
8.渲染图像。
2.OpenGL 基本图元
OpenGL基本图元.png图元描述:
GL_POINTS 点 (每个顶点在屏幕上都是单独点)
GL_LINES 线 (每⼀对顶点定义⼀个线段)
GL_LINE_STRIP 条带线 (一个从第⼀个顶点依次经过每⼀个后续顶点而绘制的线条)
GL_LINE_LOOP 循环线 (和GL_LINE_STRIP相同,但是最后⼀个顶点和第⼀个顶点连接起来了)
GL_TRIANGLES 独立三角形 (每3个顶点定义⼀个新的三角形)
GL_TRIANGLE_STRIP 三角形条带 (共⽤一个条带(strip)上的顶点的一组三⻆形)
GL_TRIANGLE_FAN 三角形扇面 (以⼀个圆点为中⼼呈扇形排列,共⽤相邻顶点的⼀组三⻆形)
3.OpenGL 三⻆形环绕⽅式
在默认情况下,OpenGL认为具有逆时针⽅向环绕的多边形为正⾯.
glFrontFace(GL_CW);
GL_CW:告诉OpenGL 顺时针环绕的多边形为正⾯;
GL_CCW:告诉OpenGL 逆时针环绕的多边形为正⾯;
4.OpenGL 投影方式
正投影
CLFrustum::SetOrthographic(GLfloat xMin, GLfloat xMax, GLfloat yMin, GLfloat yMax, GLfloat zMin, GLfloat zMax)
参数:
xMin/xMax:x轴
yMin/yMax:y轴
zMin/zMax:z轴
透视投影
CLFrustum::SetPerspective(float fFov , float fAspect ,float fNear ,float fFar);
参数:
fFov:垂直方向上的视场角度
fAspect:窗口的宽度与⾼度的纵横⽐
fNear:近裁剪面距离
fFar:远裁剪面距离
纵横⽐ = 宽(w)/高(h)
5.OpenGL 固定存储着⾊器
单元(Identity)着色器 GLT_SHADER_IDENTITY
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY,GLfloat vColor[4]);
参数1: 存储着⾊器种类-单元着⾊器
参数2:颜色
使⽤场景: 绘制默认OpenGL坐标系(-1,1)下图形. 图形所有片段都会以一种颜色填充
平面(Flat)着色器 GLT_SHADER_FLAT
GLShaderManager::UseStockShader(GLT_SHADER_FLAT, GLfoat mvp[16], GLfloat vColor[4]);
参数1: 存储着⾊器种类-平⾯着⾊器
参数2: 允许变化的4*4矩阵
参数3: 颜⾊
使用场景: 在绘制图形时, 可以应⽤变换(模型/投影变化).
上色(Shaded)着色器 GLT_SHADER_SHADED
参数1: 存储着⾊器种类-上⾊着⾊器
参数2: 允许变化的4*4矩阵
使用场景: 在绘制图形时, 可以应⽤变换(模型/投影变化) 颜⾊将会平滑地插入到顶点之间称为平滑着⾊.
默认光源着色器 GLT_SHADER_DEFAULT_LIGHT
GLShaderManager::UseStockShader(GLT_SHADER_DEFAULT_LIGHT, GLfoat mvMatrix[16], GLfloat pMatrix[16], GLfloat vColor[4]);
参数1:默认光源着色器
参数2:模型视图矩阵
参数3:投影矩阵
参数4:颜色
使⽤场景: 在绘制图形时, 可以应用变换(模型/投影变化) 这种着⾊器会使绘制的图形产生阴影和光照的效果.
点光源着色器 GLT_SHADER_POINT_LIGHT_DIFF
GLShaderManager::UseStockShader(GLT_SHADER_POINT_LIGHT_DIFF, GLfoat mvMatrix[16], GLfloat pMatrix[16], GLfloat vLightPos[3], GLfloat vColor[4]);
参数1:点光源着色器
参数2:模型视图矩阵
参数3:投影矩阵
参数4:视点坐标系中的光源位置
参数5:颜色
使用场景: 在绘制图形时, 可以应用变换(模型/投影变化) 这种着⾊器会使绘制的图形产⽣阴影和光照的效果.它与默认光源着⾊器⾮常类似,区别只是光源位置可能是特定的
纹理替换矩阵着色器 GLT_SHADER_TEXTURE_REPLACE
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_REPLACE, GLfoat mvMatrix[16], GLint nTextureUnit);
参数1: 纹理替换矩阵着⾊器
参数2: 模型4*4矩阵
参数3: 纹理单元
使用场景: 在绘制图形时,可以应用变换(模型/投影变化)这种着⾊器通过给定的模型视图投影矩阵.使⽤纹理单元来进⾏颜⾊填充.其中每个像素点的颜⾊是从纹理中获取.
纹理调整着色器 GLT_SHADER_TEXTURE_MODULATE
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_MODULATE, GLfoat mvMatrix[16], GLfloat vColor, GLint nTextureUnit);
参数1: 纹理调整着⾊器
参数2: 模型4*4矩阵
参数3: 颜⾊
参数4: 纹理单元
使⽤场景: 在绘制图形时, 可以应⽤变换(模型/投影变化)这种着⾊器通过给定的模型视图投影矩阵. 着⾊器将⼀个基本色乘以⼀个取自纹理单元nTextureUnit的纹 理.将颜色与纹理进⾏颜⾊混合后才填充到⽚段中.
纹理光源着色器 GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF
GLShaderManager::UseStockShader(GLT_SHADER_TEXTURE_POINT_LIGHT_DIFF, GLfloat mvMatrix, GLfoat mvMatrix[16], GLfloat vLightPos[3], GLfloat vBaseColor[4], GLint nTextureUnit);
参数1:纹理光源着色器
参数2:模型视图矩阵
参数3:投影矩阵
参数4:视点坐标系中的光源位置
参数5:几何图形的基本色
参数6:将要使用的纹理单元
使⽤场景: 在绘制图形时, 可以应用变换(模型/投影变化)这种着⾊器通过给定的模型视图投影矩阵. 着⾊器将⼀个纹理通过漫反射照明计算进⾏调整(相乘).
6.GLBatch
//GLBatch类可以作为7种图元的简单批次容器使用。而且它知道在使用GL_ShaderManager支持的任意存储着色器时如何对图元进行渲染。
void GLBatch::Begain(GLeunm primitive,GLuint nVerts,GLuint nTexttureUnints = 0);
参数1:图元
参数2:顶点数
参数3:一组或者2组纹理坐标(可选)
//复制表面法线
void GLBatch::CopyNormalDataf(GLfloat *vNorms);
//复制颜色
void GLBatch::CopyColorData4f(GLfloat *vColors);
//复制纹理坐标
void GLBatch::CopyTexCoordData2f(GLFloat *vTextCoords,GLuint uiTextureLayer);
//结束绘制
void GLBatch::End(void);
网友评论