GLSL,OpenGL Shading Language,GLSL中没有指针,并且没有任何类型的字符串或字符。

(1)GLSL的修饰符与基本数据类型

const:用于声明非可写的编译时常量变量;

attribute:用于经常更改的信息,只能在顶点着色器中使用;

uniform:用于外部程序传递给shader的变量,shader只能用,不能改;

varying:用于从顶点着色器向片元着色器传递数据的变量。

然后是基本数据类型,int、float、bool。注意float可以指定精度:

highp:32bit,一般用于顶点坐标(vertex coordinate);

medium:16bit,一般用于纹理坐标(texture coordinate);

lowp:8bit,一般用于颜色表示。

接下来是向量类型。

vec4:4分量浮点向量;

ivec4:4分量整数向量;

uvec4:4分量无符号整数向量;

bvec4:4分量布尔向量;

四维向量:

attribute vec4 position;

矩阵类型,所有的矩阵类型都只支持浮点数,不支持整数或者布尔矩阵:

uniform lowp mat4 colorMatrix;

纹理类型,一般仅在Fragment Shader中使用这个类型,二维纹理的声明方式如下:

uniform sampler2D texSampler;

最后是varing,用于在Vertex Shader和Fragment Shader中传递参数。首先在VS中声明这个类型的变量代表纹理的坐标点,并且对这个变量进行赋值,代码如下:

attribute vec2 texcoord;
varying vec2 v_texcoord;
void main(void)
{
v_texcoord = texcoord;
}

紧接着在FS中也声明同名的变量,然后使用texture2D方法取出二维纹理中该纹理坐标点上的像素值,代码如下:

varying vec2 v_texcoord;

vec4 texel = texture2D(texSampler, v_texcoord);

取出了该坐标点上的像素值之后,就可以进行像素变化操作了,比如说提高对比度,最终将改变的像素值赋给gl_FragColor。

(2)GLSL的内置函数与内置变量

最常见的内置变量是两个Shader的输出变量,首先是VS的:

vec4 gl_position;

上述代码用来设置顶点转换到屏幕坐标的位置,VS一定要去更新这个数值。

float gl_pointSize;

在粒子效果的场景下,需要为粒子设置大小,改变该内置变量的值就是为了设置每一个粒子矩形的大小。

其次是FS的内置变量:

vec4 gl_FragColor;

上述代码用于指定当前纹理坐标所代表的像素点的最终颜色值。

(3)其他

sampler2D类型,其实就是纹理数据。另外还有一个方法texture2D,第一个参数是纹理数据,第二个参数是纹理坐标,这个方法就是在纹理数据中取出当前片段对应在纹理数据中位置上的数据颜色。

OpenGL笔记(三) GLSL语法与内建函数的更多相关文章

  1. Webpack4 学习笔记三 ES6+语法降级为ES5

    前言 此内容是个人学习笔记,以便日后翻阅.非教程,如有错误还请指出 Webpack 将es6.es7语法降级为es5 需要通过 babel JavaScript编译器. 安装: npm i babel ...

  2. VUE 学习笔记 三 模板语法

    1.插值 a.文本 数据绑定最常见的形式就是使用“Mustache”语法 (双大括号) 的文本插值 <span>Message: {{ msg }}</span> v-once ...

  3. Java笔记(三)……基础语法

    关键字 标识符 在程序中自定义的一些名称 由26个英文字母大小写,数字:0-9,符号:_ $组成 定义合法标识符规则: 数字不可以开头. 不可以使用关键字. Java中严格区分大小写. 注意:在起名字 ...

  4. 学习笔记:GLSL Core Tutorial – Pipeline (OpenGL 3.2 – OpenGL 4.2)

    GLSL Core Tutorial – Pipeline (OpenGL 3.2 – OpenGL 4.2) GLSL 是一种管道,一种图形化的流水线 1.GLSL 的具体工作流程: 简化流程如下: ...

  5. OpenGL 笔记 <2> Compiling and Linking a shader program

    Preface 这一节所有的主要内容都在一个OpenGL库文件中<LoadShaders.h> ,只需要用LoadShader()函数进行加载即可.但是由于老是出错,所以自己实现了一下,也 ...

  6. OpenGL笔记(五) 着色器渲染(以Android为例)

    一.Android平台上下文环境的创建及初始化 1. 首先实例化Android上下文环境,即EGL的初始化. bool EGLCore::init(EGLContext sharedContext) ...

  7. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  8. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  9. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

随机推荐

  1. MRO + super面试题(详解)

    class Init(object): def __init__(self, v): print("init") self.val = v class Add2(Init): de ...

  2. Angular 6.X CLI(Angular.json) 属性详解

    Angular CLI(Angular.json) 属性详解 简介 angular cli 是angular commond line interface的缩写,意为angular的命令行接口.在an ...

  3. HTML5 简单归纳 -- 前端知识 (一)

    HTML5简介 1.h5不是一个新语言,它是HTML语言第五次重大修改--版本 2.   2014年  h5 3.支持:目前所有的主流浏览器都支持h5,IE8以下不支持 4.特性: a:抛弃了h4中不 ...

  4. OSGI企业应用开发(九)整合Spring和Mybatis框架(二)

    上篇文章中,我们完成了在OSGI应用中整合Spring和Mybatis框架的准备工作,本节我们继续Spring和Mybatis框架的整合. 一.解决OSGI整合Spring中的Placeholder问 ...

  5. 前端开发笔记(3)css基础(中)

    上一篇中我们学习了html的标准文档流,下面我们先来看看如何脱离标准流. 脱离标准流 css中一共有三种方法脱离标准流 浮动 绝对定位 固定定位 浮动 我们要搞清楚什么是浮动,先来看一个标准文档流的例 ...

  6. Android 系统中运行jar文件

    在android系统中运行jar操作步骤: 1.       打包编译jar包 2.       将jar包导入android设备中 adb push test.jar  /data/local/tm ...

  7. centos6.5安装mysql

    1.yum -install  mysql mysql-server -y 2.修改mysql的root的密码 登录:mysql -uroot        修改密码:            use ...

  8. sql server中quotename()函数的用法(转载)

    操作sql server尤其是写存储过程时,要用到各种各样的函数,今天就总结一个quotename()的用法.1.语法: quotename('character_string'[,'quote_ch ...

  9. 建站相关-github+hexo, Markdown

    sunwhut的博客写的tutorial非常详细,参照该文一步步来会很顺利. 以后有时间也可以鼓捣一下Django. hexo: 使用了上面博客推荐的NexT主题.NexT主题配置方式见此文. hex ...

  10. JBoss 7 更改response header中的Server参数

    jboss服务器缺省情况下会在HTTP response header中显示自身的标识,如下 Server: Apache-Coyote/1.1 出于安全考虑,如果不想让人知道服务器类型,可以用以下方 ...