cg数据类型

简介: Cg 支持7 种基本的数据类型:1. float,32 位浮点数据,一个符号位。浮点数据类型被所有的profile 支持(但是DirectX8 pixel profiles 在一些操作中降低了浮点数的精度和范围);2.

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

相关文章
|
23天前
QT里面字符串转ieee754标准的float浮点数
QT里面字符串转ieee754标准的float浮点数
12 0
|
4月前
|
机器学习/深度学习 数据处理 索引
Python下数值型与字符型类别变量独热编码(One-hot Encoding)实现
Python下数值型与字符型类别变量独热编码(One-hot Encoding)实现
|
7月前
|
存储 编译器 对象存储
[Eigen中文文档] 包含Eigen对象的结构体
如果定义的结构体包含固定大小的可向量化 Eigen 类型成员,则必须确保对其调用 operator new 来分配正确的对齐缓冲区。如果仅使用足够新的编译器(例如,GCC>=7、clang>=5、MSVC>=19.12)以 [c++17] 模式编译,那么编译器会自动处理所有事情,可以跳过本节。 否则,必须重载它的 operator new 以便它生成正确对齐的指针(例如,Vector4d 和 AVX 的 32 字节对齐)。幸运的是,Eigen 为提供了一个宏 EIGEN_MAKE_ALIGNED_OPERATOR_NEW 来完成这项工作。
118 0
|
7月前
[Eigen中文文档] 固定大小的可向量化Eigen对象
本文主要解释 固定大小可向量化 的含义。
50 0
|
9月前
|
C语言 Python
ENVI_IDL基础:常用数据类型_创建数组_类型转换_print输出_基本运算_关系运算
ENVI_IDL基础:常用数据类型_创建数组_类型转换_print输出_基本运算_关系运算
309 0
|
11月前
|
分布式计算 算法 异构计算
m基于FPGA的RGB转ycrcb颜色空间转换算法实现,包含testbench,对比三种转换方法
m基于FPGA的RGB转ycrcb颜色空间转换算法实现,包含testbench,对比三种转换方法
161 1
VB编程:利用数组实现矩阵转换-28
VB编程:利用数组实现矩阵转换-28
|
机器学习/深度学习 Scala 索引
Scala - 数值型特征分桶
机器学习中最基础的一步就是数据的特征工程,这其中最常见的就是数值型特征的分桶,下面使用两种方法对数值型特征分桶并对比效率。
138 0
Scala - 数值型特征分桶
ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
ML之DS:仅需一行代码实现对某字段下的所有数值实现同一机制的改变或转换(比如全部转为str类型/全部取平方值)
|
Go PHP
【GO】复合类型:切片
【GO】复合类型:切片
79 0
【GO】复合类型:切片