美文网首页OpenGL
看图理解:OpenGL 的三种变量类型(uniform、att

看图理解:OpenGL 的三种变量类型(uniform、att

作者: Hanfank | 来源:发表于2019-05-15 16:44 被阅读0次

    回顾:
    1. 快速理解OpenGL专业名词
    2. 看图解析:OpenGL“图元”

    看图理解:OpenGL 的三种变量类型(uniform、attributes、Textrue Data)

    OpenGL 被设计为客户端与服务端端CS模型。客户端为应用程序调用的OpenGL接口,运行在CPU上向服务端发送各种渲染请求。而服务端则会通过图形渲染管线执行真正的渲染工作。运行在GPU上。


    管线

    在shader 中,属性变量和统一变量需要由应用设置,attribute属性变量用于传递顶点信息,而uniform统一变量则用于传递用户自定义的变量。这两种变量在shader中会被定义为全局变量。

    1. uniform(统一变量)

    • uniform是一个常量值,储存各种着色器需要的数据,例如:转换矩阵、光照参数或者颜色。
    uniform mat4 viewProjMatrix; //投影+视图矩阵
    uniform mat4 viewMatrix;     //视图矩阵
    uniform vec3 lightPosition;  //光源位置
    
    • uniform的空间可以被顶点着色器和片段着色器使用,但是它不能被任何一个着色器修改。
    • 使用时可以作为统一修改常量使用,意思是给uniform设置数据后,顶点着色器(vertex shader)或片段着色器(fragment shader)的相关数据一起被修改。
    • uniform是一种分配在硬件上的储存常量值的空间,储存空间是固定的。在程序中uniform的数量是受限的。这个限制能通过读gl_MaxVertexUniformVectors 和gl_MaxFragmentUniformVectors编译变量得出。( 或者用GL_MAX_VERTEX_UNIFORM_VECTORS 或GL_MAX_FRAGMENT_UNIFORM_ VECTORS 为参数调用glGetIntegerv)OpenGL 必须至少提供256个顶点着色器uniform和224个片段着色器uniform。

    2. attributes(属性)

    • 一般attribute变量储存一些顶点数据,如:顶点坐标、法线、纹理坐标、顶点颜色等。
    • attribute变量只能在顶点着色器(vertex shader)中使用。
    • attribute变量不能在fragment shader中声明,也不能被fragment shader中使用。

    3. Textures(纹理)

    纹理
    • 纹理是图片,图片也是纹理。在游戏中所看到的人物模型、树木模型,都是有纹理贴图的。它像一张贴纸一样贴在模型表面。
    • 纹理可以被顶点着色器(vertex shader)和片段着色器(fragment shader)使用。
    • 使用纹理坐标获取纹理颜色叫采样
      纹理的四种环绕方式
      四种环绕方式
    GL_REPEAT           重复纹理图像
    GL_MIRRORED_REPEAT  和GL_REPEAT一样,每次图形是镜像放置的.
    GL_CLAMP_TO_EDGE    纹理坐标会被约束在0-1之前,超出的部份会重复纹理坐标的边缘,产生一种边缘被拉伸的效果
    GL_CLAMP_TO_BORDER  超出的坐标为用户指定的边缘颜色。
    

    文献
    OpenGL ES 3.0之Uniform详解
    OpenGL Texture 纹理
    精通Cocos2d-x游戏开发(进阶卷)
    三 基础渲染-opengl基础渲染架构

    相关文章

      网友评论

        本文标题:看图理解:OpenGL 的三种变量类型(uniform、att

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