美文网首页ios开发音视频
OpenGL学习之路(1.0) GLSL语法基础 (上)

OpenGL学习之路(1.0) GLSL语法基础 (上)

作者: velue | 来源:发表于2019-03-04 22:58 被阅读0次

    着色语言

    • GLSL(OpenGL Shading Language) 和C语言非常类似
    • Metal Shading Language 和C++11.0类似 共同基于C/C++;语法相似,过程原理是非常类似.

    变量和数据类型

    基本数据类型

    • 整型(有符号/无符号)
    • 浮点数(单精度)
    • 布尔值
    • 向量类型/矩阵类型

    注意 GLSL没有指针!xcode上面表示的只是字符串

    
    //true/false
    bool bDone = false;
    int iValue = 42;
    uint uiValue = 32u;
    float fValue = 3.14159f;
    
    
    • 向量/分量类型


      image.png
    • 向量的使用
    
    //1.声明4分量的float向量
    vec4 v1;
    
    //2.声明4分量并构成它
    vec4 v2 = vec4(1,2,3,4); vec4 v3 = vec4(0,0,0,0);
    
    //3.向量运算
    //向量相加
    v1 = v2 + v3;
    vec4 v4 = v1;
    v1 += vec4(10,10,10,10);
    v1 *= 5;
    
    //获取向量的元素,可以通过x,y,z,w来获取向量中的元素;
    v1.x = 3.0f;
    v1.y = 4.0f;
    v1.z = 5.0f;
    v1.w = 1.0f;
    
    v1.xy = vec2(1,2);
    v1.xyz = vec3(1,2,3);
    //获取向量的元素,可以通过r,g,b,a 来获取向量中元素.
    v2.r = 1.0f;
    v2 = vec4(1.0f,1.0f,1.0f,1.0f);
    
    //获取向量元素,可以s,t,p,q 来获取纹理坐标控制 
    v1.st = vec2(1.0,2.0);
    v1.st = v2.st;
    //不可以如下:xt不允许混合
    v1.st = v2.xt;
    向量数据累形还可以swizzle(调换)操作
    //将颜色数据RGB顺序化BGR顺序
    v1.bgra = v2.rgba;
    //向量的一次性所有分量操作
    v1.x = v2.x + 5.0f;
    v1.xyz = v2.xyz + vec3(5.0f,4.0f,1.0f);
    
    

    矩阵类型

    • 向量类型不同,所有的矩阵类型只支持浮点数.不支持整数,bool类型


      image.png
    
    mat4 m1;
    vec4 v2;
    vec4 vOutPos ;
    
    //矩阵可以与向量相乘,应用顶点模型/投影矩阵变化时
    m1 = mat4(
                1.0,1.0,1.0,1.0,
                1.0,1.0,1.0,1.0,
                1.0,1.0,1.0,1.0,
                1.0,1.0,1.0,1.0,
              )
    vOutPos = v2 * m1;
    m1 = mat4(1.0f);
        
    
    

    相关文章

      网友评论

        本文标题:OpenGL学习之路(1.0) GLSL语法基础 (上)

        本文链接:https://www.haomeiwen.com/subject/orknkqtx.html