回顾:
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基础渲染架构
网友评论