美文网首页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