• OpenGL Shader Key Points (2)



    1.  Uniform

    1.1.  Uniform变量

    不是所有的变量都是跟顶点一一对应的,如变换矩阵,光源位置等。

    Uniform变量可以在任何类型的shader中使用,但只能作为输入值,不能在shader中给它赋值,只能在C/C++程序中指定。

    layout (location = 0) in vec3 VertexPosition;
    layout (location = 1) in vec3 VertexColor;
    out vec3 Color;
    uniform mat4 RotationMatrix;
    void main()
    {
    Color = VertexColor;
    gl_Position = RotationMatrix *vec4(VertexPosition,1.0);
    }
     


    在程序中指定uniform的值:

    GLuint location =glGetUniformLocation(programHandle,  "RotationMatrix");
    if( location >= 0 )
    {
    glUniformMatrix4fv(location, 1, GL_FALSE,  &rotationMatrix[0][0]);
    }


    API:

             遍历shader program所有的uniform变量

             glGetProgramiv

    glGetActiveUniform

    glGetActiveUniformName

    glGetUniformLocation

    1.2.  Uniform blocks

    单独的uniform变量是跟shader program绑定的,因而不能在多shader program中共享。

    Uniform blocks用来在不同的shaderprogram中共享uniform数据。

    API:

    glGetUniformBlockIndex //根据名称找到uniformblocks的索引

    glGetActiveUniformBlockiv //根据索引找到blocks的大小

    glGetUniformIndices//根据uniform blocks的各分量的名字找到索引

    glGetActiveUniformsiv//找到各分量的便宜量,这样就可以分配block并设置分量的值。

    1.2.1.  创建uniform buffer object (UBO):

    GL_UNIFORM_BUFFER

    glGenBuffers

    glBindBuffer

    glBufferData

    glBindBufferBase // UBO与uniformblocks绑定

  • 相关阅读:
    css学习_css3伸缩布局 flex布局
    css学习_cs3s旋转的图片
    css学习_css3过渡
    css学习_css伪元素的本质
    css学习_css精灵技术、字体图标
    css学习_css用户界面样式
    Python 的 with 语句
    KNN--Python实现
    Python中NumPy(axis=0 与axis=1)
    Python中escape和unescape
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333113.html
Copyright © 2020-2023  润新知