计算机图形学笔记---Cg语言(一)

在其他的profiles中,for和while循环只有当知道确切循环次数时才能被使用;但其实没有确切把握不用在低级的profiles中使用
被编译的着色程序文件名必须加上.cg后缀 注意一个难以查明的编译情况:着色程序中某些变量没有为最终输出做出贡献,则编译会将该部分代码忽略;如果是从外部宿主程序中传入的变量,且在着色程序中没用,则宿主程序传入变量的接口函数会报错“找不到该变量”较为少见的情况
GPU编程,无法跟踪调试着色程序!
控制流语句要求其中的条件表达式返回值都是bool类型 与C语言不同!
函数的递归调用在Cg中被禁止,Switch/case/defalut作为保留关键字,但目前不被任何profile支持

Cg支持7种数据类型——
1)float 32位浮点数据,一个符号位
2)Half 16位浮点数据
3)int 32位整型 有些profile会将Int作为float使用
4)fixed 12位定点数,被所有的fragment profiles支持
5)bool 布尔数据,被所有的profiles支持
6)sampler 纹理对象的句柄分为6类:sampler, sampler1D, sampler2D, sampler3D, samplerCUBE,和samplerRECT。DirectX profiles不支持samplerRECT类型,除此之外这些类型被所有的pixel profiles和 NV40 vertex program profile所支持
7)string,字符类型,该类型不被当前存在的profile所支持,实际上也没有必要在Cg程序中用到字符类型,但是你可以通过Cg runtime API声明该类型变量,并赋值;因此,该类型变量可以保存Cg文件的信息。
表格见
http://blog.csdn.net/familycsd000/article/details/45499049
Cg还提供了内置的向量数据类型,基于基础数据类型,eg.float4,bool4
注意:向量最长不能超过4元;较长的向量还可以通过较短的向量进行构建;矩阵数据类型的最大维数不能超过4*4阶
向量和矩阵是内置的数据类型(矩阵基于向量),数组则是一个数据结构 与C/C++不同

支持结构体(相当于一种数据类型),默认访问public
struct myAdd{
float val;
float add(float x)
{
return val+x;
}
};
myAdd s;
绑定语义类型——为了与宿主环境进行数据交换时识别不同数据类型的
目前Cg 支持的绑定语义类型包括POSTION 位置),COLOR(颜色),NORMAL(法向量),Texcoord(纹理坐标)等类型。
类型转换也是两种

Cg 语言中对于常量数据可以加上类型后缀,表示该数据的类型。
常量的类型后缀(type suffix)有3 种:
f :表示 float;
h: 表示 half;
x: 表示 fixed

关系操作符和逻辑操作符都返回bool类型,故统一称为boolean operator;并允许对所以向量使用。表达式中的向量的每个分量都进行一对一运算,最后返回bool类型的向量,长度和操作数向量一致
这里写图片描述
这里写图片描述
移位操作符用于向量类型是Int的向量上
Swizzle操作符——将一个向量的成员取出组成一个新的向量
这里写图片描述
不能对数组使用

Cg语言中参数传递同样分为值传递和引用传递,但不支持指针机制,遂用不同的修辞符来区分——
1.in 修辞一个形参只是用于输入,进入函数体被初始化 值传递
2.out 修辞一个形参只是用于输出 运行结果
3.inout 修辞一个形参是用于输入和输出 引用传递
传入参数时,写为 out float x; float x==in float x
也可以用return代替out

猜你喜欢

转载自blog.csdn.net/zys91011_muse/article/details/75349540