本文共 1864 字,大约阅读时间需要 6 分钟。
Cg 支持7 种基本的数据类型:
Cg还提供了内置的向量数据类型(built-in vector data types),内置的向量数据类型基于基础数据类型。:向量最长不能超过4 元,即在Cg 程序中可以声明float1、float2、float3、float4 类型的数组变量,但是不能声明超过4 元的向量。
向量初始化方式一般为:float4 array = float4(1.0, 2.0, 3.0, 4.0);此外,Cg 还提供矩阵数据类型,不过最大的维数不能超过4*4 阶。
float4x4 matrix4;//表示4*4 阶矩阵,这是最大的维数矩阵的初始化方式为:float2x3 matrix5 = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};注意:Cg 中向量、矩阵与数组是完全不同,向量和矩阵是内置的数据类型(矩阵基于向量),而数组则是一种数据结构,不是内置数据类型!这一点和C/C++中不太一样,在C/C++中,这三者同属于数据结构,数组可以构建向量和矩阵。
数组类型
在着色程序中,数组通常的使用目的是:作为从外部应用程序传入大量参数到Cg 的顶点程序中的形参接口,例如与皮肤形变相关的矩阵数组,或者光照参数数组等。简而言之,数组数据类型在Cg 程序中的作用是:作为函数的形参,用于大量数据的转递。Cg 中声明数组变量的方式和C 语言类似。进行数组变量声明时,一定要指定数组长度,除非是作为函数参数而声明的形参数组。
结构类型
Cg 语言支持结构体(structure),实际上Cg 中的结构体的声明、使用和C++非常类似(只是类似,不是相同)。结构里面有变量和函数。注意:在当前的所有的profile 版本下,如果结构体的一个成员函数使用了成员变量,则该成员变量要声明在前。此外,成员函数是否可以重载依赖于使用的profile 版本。一般来说,Cg 的源代码都会在文件首部定义二个结构体,分别用于定义输人和输出的类型,这二个结构体定义与普通的C 结构定义不同,除了定义结构体成员的数据类型外,还定义了该成员的绑定语义类型( Binding Semantics),所谓绑定语义类型是为了与宿主环境进行数据交换的时候识别不同数据类型的。目前Cg 支持的绑定语义类型包括POSTION 位置),COLOR(颜色),NORMAL(法向量),Texcoord(纹理坐标)等类型。
类型转换
Cg 中的类型转换和C 语言中的类型转换很类似。C 语言中类型转换可以是强制类型转换,也可以是隐式转换,如果是后者,则数据类型从低精度向高精度转换。在Cg 语言中也是如此。Cg 语言中对于常量数据可以加上类型后缀,表示该数据的类型。
常量的类型后缀(type suffix)有3 种:f :表示 float;h: 表示 half;x: 表示 fixed本文转自jiahuafu博客园博客,原文链接如需转载请自行联系原作者jiahuafu