渲染管线
渲染管线.png渲染管线简化流程.png
- 注:以上两张图片转载于https://www.jianshu.com/p/c0e71b4c1bf4
存储着色器
- 初始化
GLShaderManager shaderManager
shaderManager.InitializeStockShaders()
- 单元着色器
GLShaderManager::UserStockShader(GLT_SHADER_IDENTITY, GLFloat vColor[4])
- 平面着色器
GLShaderManager::UserStockShader(GLT_SHADER_FLAT, GLFloat mvp[16], GLFloat vColor[4])
mvp[16]: 模型视图投影矩阵
- 上色着色器(颜⾊将会平滑地插⼊到顶点之间)
GLShaderManager::UserStockShader(GLT_SHADER_SHADED, GLFloat mvp[16])
- 默认光源着色器(产生阴影和光照效果)
GLShaderManager::UserStockShader(GLT_SHADER_DEFAULT_LIGHT, GLFloat mvMatrix[16], GLFloat pMatrix[16], GLFloat vColor[4])
GLT_SHADER_DEFAULT_LIGHT: 默认光源着色器
mvMatrix[16]: 模型视图矩阵
pMatrix[16]: 投影矩阵
vColor[4]: RGBA颜色值
- 点光源着色器(可以指定光源位置)
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIFF, GLFloat mvMatrix[16], GLFloat pMatrix[16], GLFloat vLightPos[3], GLFloat vColor[4])
vLightPos[3]: 点光源位置
- 纹理替换矩阵着色器(使⽤纹理单元来进行颜色填充)
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_REPLACE, GLFloat mvMatrix[16], GLint nTextureUnit)
- 纹理调整着色器(将颜⾊与纹理进行颜⾊混合后才填充到片段中)
GLShaderManager::UserStockShader(GLT_SHADER_TEXTURE_MODULATE, GLFloat mvMatrix[16], GLFloat vColor[4], GLint nTextureUnit)
- 纹理光源着色器(将⼀个纹理通过漫反射照明计算进行调整)
GLShaderManager::UserStockShader(GLT_SHADER_POINT_LIGHT_DIFF, GLFloat mvMatrix[16], GLFloat pMatrix[16], GLFloat vLightPos[3], GLFloat vBaseColor, GLint nTextureUnit)
vBaseColor: 颜色值(几何图形的基本色)
基础图元
图元 | 描述 |
---|---|
GL_POINTS | 单独点 |
GL_LINES | 线段 |
GL_LINE_STRIP | ⼀个从第⼀个顶点依次经过每一个后续顶点而绘制的线条 |
GL_LINE_LOOP | 和GL_LINE_STRIP相同,但是最后一个顶点和第⼀个顶点连接起来了 |
GL_TRIANGLES | 每3个顶点定义一个新的三角形 |
GL_TRIANGLE_STRIP | 共用⼀个条带(strip)上的顶点的一组三⻆形 |
GL_TRIANGLE_FAN | 以⼀个圆点为中⼼呈扇形排列,共⽤相邻顶点的⼀组三⻆形 |
- 点/线
glPointSize(4.f) // 点的大小
glLineWidth(2.5f) // 线的宽度
-
三角形环绕方式
默认情况下,OpenGL认为逆时针方向环绕的多边形为正面。
三角形环绕方式.png
//定义前向和背向的多变形:
glFrontFace(mode)
参数:GL_CW | GL_CCW
GL_CCW:表示传入的mode会选择逆时针为前向
GL_CW:表示顺时针为前向。
默认:GL_CCW。逆向时针为前向。
- GLBatch (GLTools里的一个简单容器类)
void GLBatch::Begin(GLenum primitive, GLunit nVerts, GLuint nTexttureUints = 0);
primitive: 图元
nVerts: 顶点数
nTexttureUints: 一组或2组纹理坐标
// 复制顶点数据
void GLBatch::CopyVertexData3f(GLFloat *vVerts);
// 复制法线数据
void GLBatch::CopyNormalDataf(GLFloat *vNorms);
// 复制颜色数据
void GLBatch::CopyColorData4f(GLFloat *vColors);
// 复制纹理坐标数据
void GLBatch::CopyTexCoordData2f(GLFloat *vTextCoords, GLuint uiTextureLayer);
// 结束复制
void GLBatch::End(void);
// 绘制图形
void GLBatch::Draw(void);
网友评论