cg的类型转换是强制类型转换,也可以是隐式转换,如果是隐式转换的话只可以从低精度转换到高精度,
比如:
float a = 1.0;
half b = 2.0;
float c = a+b;
//float c = a + (float)b;
flaot d = a +2.0;
//编译时 2.0 做float类型;
swizzle 操作符: 用于去除向量变量类型中的分量;
swizzle操作符后的x y z w分别表示向量的第一个 第二个 第三个 第四个元素;
所有流程控制语句的返回值都必须是bool型,不可以是0或者1;
vs_2_x,vp30,vp40中profile支持for和while;
禁止是用递归,保留case switch关键字;
uniform类似const;
uniform修饰表示该值通过外部程序传入,并且不随着图元信息的改变而发生变化。
in修饰一个形参用于输入,进入函数体时候被初始化,且形参不会改变实参;
out修饰一个形参只是用于输出,进入函数体的时候没有被初始化,
inout修饰一个形参即用于输入,也用于输出,这是典型的引用传值。
参数没有修饰的时候默认使用in;
通常我们在程序中涉及到的顶点,法线等都是三元向量,为什么要用四元呢?
x,y,z,0 代表是一个空间向量 x,y,z,1 则代表是一个空间点
而且可以将平移 缩放 旋转等运算统一到四阶矩阵的乘法中。
因为cg语言中不存在指针机制,所以,数组作为函数的形参,传递的是数组的完整拷贝。
而且数组可以是一维的,也可以是多维的,而且不必声明数组的长度。