美文网首页
OpenGL ES(七)-GLSL基础语法

OpenGL ES(七)-GLSL基础语法

作者: king_jensen | 来源:发表于2019-06-18 10:46 被阅读0次

变量数据类型

   bool bDone = false;
    
    int iValue = 42;
    
    uint uiValue = 3929u;
    
    float fValue = 3.14f;

向量数据类型

 //1.向量声明-4分量的float类型向量
    vec4 v1;
    
    //2.声明向量并且对其进行构造
    vec4 v2 = vec4(1,2,3,4);
    
    //3.向量运算,加,赋值给另外一个向量,与标量相乘
    vec4 v;
    vec4 vPos = vec4(1,2,3,4);
    vec4 vOffset = vec4(1,2,3,4);
    
    v = vPos + vOffset;
    v = vNewPos;
    v += vec4(10,10,10,10);
    v = vPos * vOffset;
    v *= 5;
    
    //4.向量中元素的获取 可以通过x,y,z,w来获取向量中的元素值
    v1.x = 3.0f;
    v1.xy = vec2(3.0f,4.0f);
    v1.xyz = vec3(3.0f,4.0f,5.0f);
    
    //5.可以通过颜色控制rgba
    v1.r = 3.0f;
    v1.rgba = vec4(1.0f,1.0f,1.0f,1.0f);
    
    //6.可以通过纹理坐标strq
    v1.st = vec2(1.0f,0.0f);
    
    //7.赋值混合是否合法.不可以
    v1.st = v2.xt;//不可以
    v1.st = v2.xy;//可以,没有开发意义
    
    //8.向量支持调换(swizzle)操作,2个或者2个以上向量元素来进行交换
    v1.rgba = v2.bgra;
    v2.bgra = v1.rgba;
    
    //赋值操作
    v1.r= v2.b;
     v1.g= v2.g;
     v1.b= v2.r;
     v1.a= v2.a;
    
    //9.向量支持一次性对所有分量操作
    v1.x = vother.x + 5.0f;
    v1.y = vother.y + 5.0f;
    v1.z = vother.z + 5.0f;
    
    v1.xyz = vother.xyz + vec3(5.0f,5.0f,5.0f);

矩阵

    //1.创建矩阵
    mat4 m1,m2,m3,m4;
    
    //2.构造单元矩阵
    mat4 m1 = matv(
        1.0f,0.0f,0.0f,0.0f,
        0.0f,1.0f,0.0f,0.0f,
        0.0f,0.0f,1.0f,0.0f,
        0.0f,0.0f,0.0f,1.0f,
    );
    mat4 m4 = mat4(1.0f);
    
    mat4 m3 = mat4(
       0.5f,0.5f,0.5f,0.5f,
       0.5f,0.5f,0.5f,0.5f,
       0.5f,0.5f,0.5f,0.5f,
       0.5f,0.5f,0.5f,0.5f,
    );
    m1 = m2 * m3;

const

const float zeero = 0.0;

结构体

  struct forStruct {
        vec4 color;
        float start;
        float end;
    }forVar;
    
    forVar = forStruct(vec4(1.0,1.0,1.0,1.0),0.5,2.0);

    vec4 color = forVar.color;
    float start = forVar.start;

数组

    float floatArray[4];
    vec4 vecArray[2];
    float a[4] = float[](1.0,2.0,3.0,4.0);
    vec2 c[2] = vec2[2](vec2(1.0,2.0),fec2(3.0,4.0));

函数

定义函数给3个修饰符
in : (没有指定时,默认限定修饰符),传递进入函数中,函数不能对其进行修改
inout:(传入相应数值,并且可以在函数中进行修改)
out : (函数返回时,可以将其修改)

vec4 myFunc(intout float myFloat,out vec4 m1,mat2 m2){
   }
   vec4 diffuse(vec3 normal,vec3 light,vec4 baseClor){
       return baseColor * dot(normal,light);
   }

控制语句

  if(coor.a < 0.25) {
        color.a  *= color.a;
    }else {
        color = vec4(1.0,1.0,1.0,1.0);
    }
循环支持while/do...while/for
OpenGL ES开发中,尽量减少逻辑判断,降低循环使用。

相关文章

网友评论

      本文标题:OpenGL ES(七)-GLSL基础语法

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