CG函数

来源:互联网 发布:vp影业 知乎 编辑:程序博客网 时间:2024/05/29 18:54

函数 :

     自定义函数 :

           自定义的函数必须要先声明才能被使用;

           (1)、把函数定义在调用定制方法的方法(片段函数)前。

           (2)、前向声明,前向声明方法的返回值类型、方法名和参数列表,一定没有方法体。


     CG中所有的函数都是通过值拷贝进行传参,如果想要通过调用方法得到返回值进行赋值操作,可以通过out关键字。

     如果需要把数组作为参数传递,那么,作为参数的数组必须要指定长度。有返回值的方法也是用return关键字。


CG中可以对color的一个分量直接进行赋值。


代码复用 :

         使用CG中的include指令 :

    新建  -->  Misc  -->  Empty Text File,命名以 .cginc作为后缀  -->  将需要重复调用的方法粘贴到其中  -->  在shader中删掉关于此方法的前向引用,使用指令 :

#include " 目录 / 文件名 ",即可调用方法



CG中的内建函数 :

     分为四类 :数学函数、几何函数、纹理函数、导数函数。

        几何函数 :

                 distance() 函数,求距离

                 normalize()函数,归一化向量,把一个向量的长度变为1,方向不改变。


顶点函数和片段函数也可以有返回值,但是用return关键字会报缺失语义错误,解决方法 :在参数列表后加上语义,代表这个函数的返回值的语义。

float4  vert (    ) : COLOR

{  

    return ....;

}


同一种语义不能重复输出,比如想要对两个变量都进行POSITION语义输出,会矛盾。如果语义重复,可以使用语义TEXCOORD0(0~7)语义,只要不重复即可。



结构体 :

    声明 :struct  v2f {

                      float4  pos : POSITION;

                      float2  opos : TEXCOORD0;

                 }


    使用 :v2f  vert(in float2 objPos : POSITION) {

                        v2f  o;

                        o.pos = float4(objPos,0,1);

                        o.opos = objPos;

                        return o;

                 }

                 fixed4  frag(v2f IN) : COLOR {

                            return IN.pos;

                 }

结构体也与函数一样,必须要先声明才能被使用。如果以结构体的方式输出,由于结构体中有多个成员,所以顶点函数不需要指明具体的语义。在结构体中包装的属性,只要与片段函数的语义相匹配,从顶点函数返回的值,片段函数就能使用。通过结构体的包装,让顶点和片段之间的数据传递变得很紧凑。


typedef  struct {


} v2f;                 // 以typedef的方式声明的结构体也是可以的。




CG不支持指针和任何与指针相关的操作






0 0