美文网首页OpenGL
OpenGL渲染架构

OpenGL渲染架构

作者: iOSer_jia | 来源:发表于2020-07-07 17:10 被阅读0次

    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);
    

    相关文章

      网友评论

        本文标题:OpenGL渲染架构

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