美文网首页
OpenGL渲染流程

OpenGL渲染流程

作者: 瀚_ | 来源:发表于2019-05-22 00:19 被阅读0次

渲染管线

渲染管线.png
渲染管线简化流程.png

存储着色器

  • 初始化
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 以⼀个圆点为中⼼呈扇形排列,共⽤相邻顶点的⼀组三⻆形
基础图元.png
  • 点/线
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);

相关文章

网友评论

      本文标题:OpenGL渲染流程

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