【转载】OpenGL ES 三种类型修饰 uniform attribute varying

1.uniform变量
uniform变量是外部application程序传递给(vertex和fragment)shader的变量。因此它是application通过

函数glUniform**()函数赋值的。在(vertex和fragment)shader程序内部,uniform变量就像是C语言里面

的常量(const ),它不能被shader程序修改。(shader只能用,不能改)

如果uniform变量在vertex和fragment两者之间声明方式完全一样,则它可以在vertex和fragment共享使用。

(相当于一个被vertex和fragment shader共享的全局变量)

uniform变量一般用来表示:变换矩阵,材质,光照参数和颜色等信息。

以下是例子:

uniform mat4 viewProjMatrix; //投影+视图矩阵
uniform mat4 viewMatrix;        //视图矩阵
uniform vec3 lightPosition;     //光源位置

2.attribute变量
attribute变量是只能在vertex shader中使用的变量。(它不能在fragment shader中声明attribute变量,

也不能被fragment shader中使用)

一般用attribute变量来表示一些顶点的数据,如:顶点坐标,法线,纹理坐标,顶点颜色等。

在application中,一般用函数glBindAttribLocation()来绑定每个attribute变量的位置,然后用函数

glVertexAttribPointer()为每个attribute变量赋值。

以下是例子:

uniform mat4 u_matViewProjection;
attribute vec4 a_position;
attribute vec2 a_texCoord0;
varying vec2 v_texCoord;
void main(void)
{
    gl_Position = u_matViewProjection * a_position;
    v_texCoord = a_texCoord0;
}

3.varying变量
varying变量是vertex和fragment shader之间做数据传递用的。一般vertex shader修改varying变量的值,

然后fragment shader使用该varying变量的值。因此varying变量在vertex和fragment shader二者之间的声

明必须是一致的。application不能使用此变量。

以下是例子:

// Vertex shader
uniform mat4 u_matViewProjection;
attribute vec4 a_position;
attribute vec2 a_texCoord0;
varying vec2 v_texCoord; // Varying in vertex shader
void main(void)
{
   gl_Position = u_matViewProjection * a_position;
   v_texCoord = a_texCoord0;
}

// Fragment shader
precision mediump float;
varying vec2 v_texCoord; // Varying in fragment shader
uniform sampler2D s_baseMap;
uniform sampler2D s_lightMap;
void main()
{
   vec4 baseColor;
   vec4 lightColor;
   baseColor = texture2D(s_baseMap, v_texCoord);
   lightColor = texture2D(s_lightMap, v_texCoord);
   gl_FragColor = baseColor * (lightColor + 0.25);
}
时间: 2024-12-21 02:16:12

【转载】OpenGL ES 三种类型修饰 uniform attribute varying的相关文章

设计模式之总结篇(设计模式六大原则以及设计模式三种类型)

经过这半年的学习,自己对设计模式这门课程也有了一定的认知.前面也发了关于23个设计模式的博客.现在对这些设计模式进行一个整体的总结. 首先,设计模式有六大原则: 原则一.单一职责原则 定义:There should never be more than one reason for a class to change(不要存在多于一个导致类变更的原因).通俗的说,即一个类只负责一项职责. 好处: 1.降低类的复杂度. 2.提高可读性. 3.提高可维护性. 4.变更引起的风险降低. 原则二.里氏替

C++ 中的三种类型

C++中一共三种类型 1.C++内置类型,2.1节中讲到的int.double.bool等就是基本的内置类型(低级数据类型): 2.C++还定义了一个内容丰富的抽象数据类型标准库,其中重要的如string.vector,数组和指针等(更高级的抽象数据类型): 3.第三种就是自定义的类类型,前面说过C++ 设计的焦点就是使所定义的类类型的行为可以像内置类型一样自然.

20151015_系统分析阶段分析类的三种类型

在系统分析阶段将分析类分为三种类型:实体类.界面类.控制类. 1.实体类 实体类主要是作为数据管理和业务逻辑处理层面上存在的类别: 它们主要在分析阶段区分 实体类的主要职责是存储和管理系统内部的信息,它也可以有行为,甚至很复杂的行为,但这些行为必须与它所代表的实体对象密切相关 基本信息 上述给出的实体类的定义是比较抽象的.类具有继承和递归的特点,实体类可以在抽象类的基础上进一步定义具体的类 实体类是用于对必须存储的信息和相关行为建模的类.实体对象(实体类的实例)用于保存和更新一些现象的有关信息,

真空镀膜材料网话聊钢界电商的三种类型

据真空镀膜材料网最近的观察,钢铁交易的网上平台大致可以分为三种,刻章机网在这里把他们简单的定义为挂羊头卖狗肉型.自食其力型.拓展业务型. 挂羊头卖狗肉型.从事钢铁行业的人员上网时可能经常会上一些钢铁资讯类的网站,去那里看一下当前的钢铁行业态势和行业新闻,但是近几年来,不知道大家有没有发现,越来越多的资讯类的网站开始了他们的商业之旅,有的是给自己的咨询设置权限,只有开通会员才可以浏览:还有的是设置了钢铁交易的模块,改变了最初的资讯类平台,转而做起了销售. 自食其力型.这种类型大多是一些大中型的钢铁

备份的三种类型

完全备份:备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件:(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性).差异备份:差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件:(差异备份过程中,只备份有标记的那些选中的文件和文件夹.它不清除标记,既:备份后不标记为已备份文件,换言之,不清除存档属性).增量备份:增量备份是针对于上一次备份(无论是哪种备份),备份上一次备份后,所有发生变化的文件:(增量备份过程中,只备份有标记的选中的文

一开始看到Int16, Int32, Int64这三种类型就觉得有点怪, 为什么要整个数字结尾的, 挺怪的. 昨天互相想到, ms这么干就是想让大家一眼就知道这个数据类型占多大空间吧. Int8, 等于byte, Int16, 等于short, 占2个字节. -32768 32767 Int32, 等于int, 占4个字节. -2147483648 2147483647 Int64

一开始看到Int16, Int32, Int64这三种类型就觉得有点怪, 为什么要整个数字结尾的, 挺怪的. 昨天互相想到, ms这么干就是想让大家一眼就知道这个数据类型占多大空间吧. Int8, 等于byte, Int16, 等于short, 占2个字节. -32768 32767 Int32, 等于int, 占4个字节. -2147483648 2147483647 Int64, 等于long, 占8个字节. -9223372036854775808 9223372036854775807

设计模式的三种类型

设计模式(GOF模式)分为三种类型,共23类.一.创建型模式:单例模式.抽象工厂模式.建造者模式.工厂模式.原型模式.二.结构型模式:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.三.行为型模式:模版方法模式.命令模式.迭代器模式.观察者模式.中介者模式.备忘录模式.解释器模式.状态模式.策略模式.职责链模式.访问者模式.原文链接:https://blog.csdn.net/zhw0596/article/details/80852325 原文地址:https://ww

Uniform & Attribute & Varying

[Uniform & Attribute & Varying] 顶点着色器的输入变量用关键字“attribute”来限定. 片段着色器的输入变量(它和顶点着色器的输出变量相对应)用关键字"varying"来限定. uniform指定这个值从应用程序传递给着色器,并在一个特定的图元中保持为常量值. Uniform & Attribute & Varying,布布扣,bubuko.com

Android OpenGL ES(三)----编程框架

首先当然是创建Android项目,你可以选择最新的Android Studio也可以选择eclipse都是一样的.我们重点讲解开发OpenGL ES的流程 1.定义顶点着色器和片段着色器 第一节我们讲解的已经很细致了,为了便于理解在这里在详细的说明一下.并且换一种方式定义着色器. 我们知道第一篇定义的顶点的坐标和颜色是分开的,这样可以但如果把它们放在一起会方便许多. 假设我们要绘制一个长方形和两条直线,二个定点,我们就需要这样来定义这个数组. float[] tableVerticesWithT