精华内容
下载资源
问答
  • GLSL

    2019-08-19 18:44:57
    GLSL 文章目录GLSL@[toc]修饰符:内置变量顶点着色器可用的内置变量:片段着色器的内置变量:操作符关于矩阵discard函数类型转换 最近星音写了一款能够在AE中支持写shader的插件PixelsWorld,就着他在群里给的测试...

    GLSL

    最近星音写了一款能够在AE中支持写shader的插件PixelsWorld,就着他给的测试版,想着可以这个渠道把GLSL的门入了。

    以下大部分资料来自网络。

    GLSL的大多数语法都与C相似。下面我只列出一些特殊,值得注意的。

    修饰符:

    修饰符描述
    const常量值必须在声明时初始化。它是只读的不可修改的。
    attribute表示只读的顶点数据,只用在顶点着色器中。数据来自当前的顶点状态或者顶点数组。它必须是__全局范围__声明的,不能再函数内部。一个attribute可以是浮点数类型的标量,向量,或者矩阵。不可以是数组或则结构体
    uniform一致变量。在着色器执行期间一致变量的值是不变的。与const常量不同的是,这个值在编译时期是未知的是由着色器外部初始化的。一致变量在顶点着色器和片段着色器之间是共享的。它也只能在全局范围进行声明。
    (maid的理解:一致变量可以当作是着色器对于外部的输入接口)
    varying顶点着色器的输出。例如颜色或者纹理坐标,(插值后的数据)作为片段着色器的只读输入数据。必须是全局范围声明的全局变量。可以是浮点数类型的标量,向量,矩阵。不能是数组或者结构体。
    centorid varying在没有多重采样的情况下,与varying是一样的意思。在多重采样时,centorid varying在光栅化的图形内部进行求值而不是在片段中心的固定位置求值。
    invariant(不变量)用于表示顶点着色器的输出和任何匹配片段着色器的输入,在不同的着色器中计算产生的值必须是一致的。所有的数据流和控制流,写入一个invariant变量的是一致的。编译器为了保证结果是完全一致的,需要放弃那些可能会导致不一致值的潜在的优化。除非必要,不要使用这个修饰符。在多通道渲染中避免z-fighting可能会使用到。
    in用在函数的参数中,表示这个参数是输入的,在函数中改变这个值,并不会影响对调用的函数产生副作用。(相当于C语言的传值),这个是函数参数默认的修饰符
    out用在函数的参数中,表示该参数是输出参数,值是会改变的。
    inout用在函数的参数,表示这个参数即是输入参数也是输出参数。

    内置变量

    内置变量可以与固定函数功能进行交互。在使用前不需要声明。

    顶点着色器可用的内置变量:

    名称类型描述
    gl_Colorvec4输入属性-表示顶点的主颜色
    gl_SecondaryColorvec4输入属性-表示顶点的辅助颜色
    gl_Normalvec3输入属性-表示顶点的法线值
    gl_Vertexvec4输入属性-表示物体空间的顶点位置
    gl_MultiTexCoordnvec4输入属性-表示顶点的第n个纹理的坐标
    gl_FogCoordfloat输入属性-表示顶点的雾坐标
    gl_Positionvec4输出属性-变换后的顶点的位置,用于后面的固定的裁剪等操作。所有的顶点着色器都必须写这个值。
    gl_ClipVertexvec4输出坐标,用于用户裁剪平面的裁剪
    gl_PointSizefloat点的大小
    gl_FrontColorvec4正面的主颜色的varying输出
    gl_BackColorvec4背面主颜色的varying输出
    gl_FrontSecondaryColorvec4正面的辅助颜色的varying输出
    gl_BackSecondaryColorvec4背面的辅助颜色的varying输出
    gl_TexCoord[]vec4纹理坐标的数组varying输出
    gl_FogFragCoordfloat雾坐标的varying输出

    片段着色器的内置变量:

    名称类型描述
    gl_Colorvec4包含主颜色的插值只读输入
    gl_SecondaryColorvec4包含辅助颜色的插值只读输入
    gl_TexCoord[]vec4包含纹理坐标数组的插值只读输入
    gl_FogFragCoordfloat包含雾坐标的插值只读输入
    gl_FragCoordvec4只读输入,窗口的x,y,z和1/w
    gl_FrontFacingbool只读输入,如果是窗口正面图元的一部分,则这个值为true
    gl_PointCoordvec2点精灵的二维空间坐标范围在(0.0, 0.0)到(1.0, 1.0)之间,仅用于点图元和点精灵开启的情况下。
    gl_FragData[]vec4使用glDrawBuffers输出的数据数组。不能与gl_FragColor结合使用。
    gl_FragColorvec4输出的颜色用于随后的像素操作
    gl_FragDepthfloat输出的深度用于随后的像素操作,如果这个值没有被写,则使用固定功能管线的深度值代替

    操作符

    GLSL的操作符和大多数的语言很多都没有区别。不过像 求地址的& 和 解引用的 * 操作符不再GLSL中出现,因为GLSL不能直接操作地址。类型转换操作也是不允许的。 位操作符(&,|,^,~, <<, >> ,&=, |=, ^=, <<=, >>=)是GLSL保留的操作符,将来可能会被使用。还有求模操作(%,%=)也是保留的。

    关于矩阵

    OpenGL的矩阵是列主顺序的

    discard

    片段着色器中有一种特殊的控制流成为discard。使用discard会退出片段着色器,不执行后面的片段着色操作。片段也不会写入帧缓冲区。

    if (color.a < 0.9)
    
     discard;
    

    函数

    在每个shader中必须有一个main函数。main函数中的void参数是可选的,但返回值是void时必须的。

    GLSL中的函数,必须是在全局范围定义和声明的不能在函数定义中声明或定义函数。函数必须有返回类型,参数是可选的。参数的修饰符(in, out, inout, const等)是可选的。

    结构体和数组也可以作为函数的参数。如果是数组作为函数的参数,则必须制定其大小。在调用传参时,只传数组名就可以了。

    GLSL的函数是支持重载的。函数可以同名但其参数类型或者参数个数不同即可。

    类型转换

    glsl中,没有隐式类型转换

    展开全文
  • GLSL:学习GLSL-源码

    2021-03-05 12:26:08
    学习GLSL GLSL指南表: ://thebookofshaders.com/glossary/
  • glsl:用于Rust的GLSL解析器
  • GLSL-PathTracer:GLSL路径跟踪器
  • GLSL-Debugger/glsl-devil

    2018-09-25 08:52:37
    GLSL小巧的调试工具,可以代替glDebugger。我自己编译好的,免去自己编译的麻烦
  • 文章目录1 GLSL的入口函数和基本结构2 GLSL中的变量声明3 GLSL中变量的作用域4 GLSL中变量的初始化5 GLSL中变量的隐式转换 1 GLSL的入口函数和基本结构 对于很多编程语言学习的第一步就是学习如何输出HelloWorld,学...

    1 GLSL的入口函数和基本结构

    对于很多编程语言学习的第一步就是学习如何输出HelloWorld,学过类C语言的同学都知道,C和C++程序的入口函数就是从main函数开始,那么和C语言类似,GLSL语言的入口函数也是从main开始的,每一个OpenGL的shader都有着类似于下列代码的基本结构:

    #version 330 core
    
    void main()
    {
       // 在此处添加有关的shader程序代码
    }
    
    

    2 GLSL中的变量声明

    • 与C/C++类似,GLSL是一种强类型的编程语言,所有变量在使用之前都必须提前声明,并且需要在声明时就指定变量的数据类型。
      例如:
    double redValue = 1.0f;
    
    • 其次,变量的命名规范与C语言相同:可以使用字母、数字、下划线字符组成变量的名称,但是数字和下划线不能作为名称的第一个字符。
    • 另外与C语言不同的是:变量名称在命名时不能使用连续的下划线,因为,在GLSL中使用连续下划线字符的有可能是保留字符。

    3 GLSL中变量的作用域

    • 在任何函数定义之外声明的变量拥有全局作用域,因此对着色器中所有函数都是可见的。类似于C语言中的全局变量。
    #version 330 core
    
    double redColor = 1.0f;
    
    void main()
    {
    
    }
    

    上述代码中的redColor对于该shader中所有函数都是可见。

    • 在一组大括号之内,比如函数定义、循环体或者if语句块中声明的变量,只是对于该大括号内是可见的。类似于C语言中的局部变量。
    • for循环的迭代自变量,
      下面循环中的i,
    #version 330 core
    
    
    void main()
    {
       for(int i=0;i<100;++i)
       {
    	   
       }
    }
    
    

    上述的迭代变量i只在for循环体中有效,类似于C/C++。

    4 GLSL中变量的初始化

    int pointNum = 300;
    float length = 150.89f;
    bool isVisible = true;
    double a = 3.1456465456456456465465LF;
    
    • 所有声明的变量都必须在声明的同时进行初始化,防止出现错误
    • 浮点数的初始化必须包含一个小数点或者使用科学计数法进行表示,例如7E-8
    • flaot型的变量建议在初始化的时候在数值末尾添加f或者F后缀表示其为浮点数
    • double精度的变量初始化时必须在数值末尾添加lF或者LF后缀表示其为一个双精度的变量

    5 GLSL中变量的隐式转换

    因为GLSL是一种强类型语言,其有着比C/C++语言更加严格的隐式转换规则。
    比如说在C/C++中,bool型变量可以被隐式转换为int型变量,比如:

    int isPass = false;
    

    这在C/C++中是没有语法错误的,但是在GLSL中会返回一个编译错误,错误原因为:布尔值不能赋予整形变量。

    由此可见GLSL比C/C++更加注重类型安全,在GLSL可支持隐式转换的类型如下:

    可转换的类型可从这些类型进行转换
    uintint
    floatint、uint
    doubleint、uint、float

    好的,本节对GLSL中入口函数和变量的声明使用以及初始化做了一些简单的介绍,下一节的内容将对GLSL的基本数据类型以及聚合数据类型等进行介绍。

    如果大家有兴趣,可以访问我的个站http://www.stubbornhuang.com查看更多内容!

    展开全文
  • glsl检查器 用于方格图案的 GLSL 实用程序。 uniform vec2 iResolution; #pragma glslify : checker = require('glsl - checker') void main() { vec2 uv = vec2 ( gl_FragCoord .xy / iResolution.xy); // ...
  • GLSL优化器 :warning_selector: 截至2016年中,该项目不太可能有重大发展。 在Unity,我们将转移到其他着色器编译管道,其中不使用glsl-optimizer。 因此,就我而言,将不会进行大量工作。 :warning_selector: 一...
  • GLSL简介-learning glsl

    2014-09-23 18:12:12
    WebGL图形流水线(管线/PIPELINE) OpenGL 着色语言 着色语言概况 GLSL的基本语法 着色语言的应用 变换 纹理贴图 光照 混合与雾化 程序纹理着色器 动画着色器 图像处理着色器 开发着色器的注意事项
  • GLSL GLSL和ESSL是Khronos高级着色语言。 Khronos注册中心可用于 该项目包含 该GLSL着色语言项目包含GLSL和ESSL Khronos着色语言的以下内容: 跟踪核心规格 跟踪着色语言扩展的问题(但是,应与供应商讨论特定于...
  • glsl-token-string 将 GLSL 标记数组转换为普通 GLSL 源字符串的简单帮助程序包。 用法 src = stringify(tokens) var tokenize = require ( 'glsl-tokenizer/string' ) var stringify = require ( 'glsl-token-...
  • glsl2js-模拟器 glsl2js 模拟器
  • GLSL语言集成 从下载此扩展程序或获取。 提供GLSL语言集成的VSIX项目。 包括语法高亮显示,代码完成(shader文件中的OpenGL 4.6 +标识符),带有花键和错误列表的错误标记(错误列表支持非常alpha)。 错误标记...
  • GLSL 中快速获得黑色背景上旋转的类地行星。 这不是距离场渲染,只是 2D 效果。 precision mediump float ; uniform float iGlobalTime; uniform vec3 iResolution; #pragma glslify : planet = require('glsl...
  • glsl-半色调 GLSL 中的半色调着色器,改编自 Stefan Gustavson 的工作。 双线性纹理采样和缩小由用户来实现(参见 Gustavson 教程中的步骤 5 和 9)。 对于抗锯齿,在需要此模块之前,您应该在着色器的顶部启用...
  • glsl-lang是一个用于GLSL 4.x语言的LALR解析器的板条箱,部分支持预处理器指令。 它的AST和功能是根据建模。 目录 储存库结构 crates.io 小路 描述 AST,解析器,访问者,用于GLSL语言的编译器 proc-macro crate...
  • glsl-y-rotate 生成旋转矩阵的GLSL模块。 推荐使用 。 用法 2D(垫子2) #pragma glslify : rotate = require(glsl - y - rotate) const float DEG_TO_RAD = 3.141592653589793 / 180.0 ; void main( void ) { ...
  • glslc:使用显示驱动程序的简单GLSL编译检查器
  • glsl-blend 与glslify一起使用的Photoshop混合模式。 混合模式包括“屏幕”,“乘法”,“柔光”,“鲜艳光”,“叠加”等。实现方式来源于本文有关。 演示版 安装 npm install glsl-blend 标准用法 可以使用标准...
  • Radiation glsl

    2013-08-07 14:37:22
    Radiation glsl
  • vs2019 glsl提示工具个高亮和显示行号
  • glsl-验证 GLSL Validator 是一个命令行工具,用于验证针对 ARB_separate_programs 的 GLSL 着色器。 示例用法: glsl-validate ./my-shader.glsl +profile=vertex
  • GLSL-Debugger

    2016-05-31 23:45:43
    GLSL-Debugger 对GLSL语言的调试工具

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,289
精华内容 6,515
关键字:

glsl