cg数据类型

简介:

Cg 支持7 种基本的数据类型:

  1. float,32 位浮点数据,一个符号位。浮点数据类型被所有的profile 支持(但是DirectX8 pixel profiles 在一些操作中降低了浮点数的精度和范围);
  2. half,16 为浮点数据;
  3. int,32 位整形数据,有些profile 会将int 类型作为float 类型使用;
  4. fixed,12 位定点数,被所有的fragment profiles 所支持;
  5. bool,布尔数据,通常用于if 和条件操作符(?:),布尔数据类型被所有的profiles 支持;
  6. sampler*,纹理对象的句柄(the handle to a texture object),分为6 类:sampler, sampler1D, sampler2D, sampler3D, samplerCUBE,和samplerRECT。DirectX profiles 不支持samplerRECT 类型,除此之外这些类型被所有的pixelprofiles 和 NV40 vertex program profile 所支持(CgUsersManual 30 页)。由此可见,在不远的未来,顶点程序也将广泛支持纹理操作;
  7. string,字符类型,该类型不被当前存在的profile 所支持,实际上也没有必要在Cg 程序中用到字符类型,但是你可以通过Cg runtime API 声明该类型变量,并赋值;因此,该类型变量可以保存Cg 文件的信息。

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博客园博客,原文链接http://www.cnblogs.com/jiahuafu/p/6237880.html如需转载请自行联系原作者

jiahuafu

相关文章
|
6月前
|
JavaScript
TS 小技巧: 使用元组生成联合类型
这篇文章介绍了使用TypeScript开发时,如何根据一个数组的值得到一个联合类型。作者介绍了一个开发小技巧:使用元组生成联合类型。文章中给出了具体的开发场景和示例代码,以及实现的步骤。通过将数组转成元组类型,然后将元组类型转成联合类型,可以实现类型检查。
TS 小技巧: 使用元组生成联合类型
|
7月前
|
JavaScript 前端开发
ES6之原始数据类型Symbol
ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值。它属于 JavaScript 语言的原生数据类型之一,其他数据类型是:undefined、null、布尔值(Boolean)、字符串(String)、数值(Number)、大整数(BigInt)、对象(Object)。Symbol的作用是创建一个不可变且唯一的标识符,可以用作对象属性的键。它可以用来解决属性名冲突的问题,避免命名冲突。
88 0
|
容器
华为机试HJ80:整型数组合并
华为机试HJ80:整型数组合并
228 1
es6扩展运算符、concat方法合并多个数组
es6扩展运算符、concat方法合并多个数组
55 0
|
JavaScript
es6数据类型Symbol以及es6操作数组常用的方法
es6数据类型Symbol以及es6操作数组常用的方法
92 0
|
C语言 Python
ENVI_IDL基础:常用数据类型_创建数组_类型转换_print输出_基本运算_关系运算
ENVI_IDL基础:常用数据类型_创建数组_类型转换_print输出_基本运算_关系运算
586 0
【ES6】Symbol数据类型
【ES6】Symbol数据类型
57 0
|
Java Go 索引
一文了解 Go 的复合数据类型(数组、Slice 切片、Map)
哈喽大家好,我是陈明勇,本文分享的内容是 Go 的复合数据类型(数组、Slice 切片、Map)。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!
166 0
一文了解 Go 的复合数据类型(数组、Slice 切片、Map)
|
人工智能
UPC-魔法序列(结论+枚举)
UPC-魔法序列(结论+枚举)
88 0
UPC-魔法序列(结论+枚举)