5.1 基本数据类型第 5 章 CG 数据类型

文章内容源自《GPU编程与CG语言之阳春白雪下里巴人》,因笔者读书易中途放弃,遂每读一章节,将其移至简书平台,以此作为对自己读书的勉励。笔者用粗体斜体 标注了关键词句,望感兴趣的读者们一起学习共勉。猛戳这里查看更多!

第 5 章 CG 数据类型

本章将着重介绍Cg语言中预定义的内置(built in)的、或称为基本(primitive)的数据类型。然后介绍可以用来声明对象的各类类型,主要是数组结构类型。学习本章时,需要体会内置向量类型和数组类型的区别。

5.1 基本数据类型

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 类: samplersampler1Dsampler2Dsampler3DsamplerCUBEsamplerRECT。 DirectX profiles 不支持 samplerRECT 类型,除此之外这些类型被所有的 pixel profiles 和 NV40 vertex program profile 所支持(CgUsersManual 30 页)。由此可见,在不远的未来,顶点程序也将广泛支持纹理操作;
  7. string,字符类型,该类型不被当前存在的 profile 所支持,实际上也没有必要在 Cg 程序中用到字符类型,但是你可以通过 Cg runtime API 声明该类型变量,并赋值;因此,该类型变量可以保存 Cg 文件的信息。

前 6 种类型会经常用到,事实上在 Wikipedia 有关 Cg 语言的阐述中只列举了前 6 种类型,而并没有提到 string 数据类型。除了上面的基本数据类型外,Cg 还提供了内置的向量数据类型(built-in vector data types),内置的向量数据类型基于基础数据类型。例如:float4,表示 float 类型的 4 元向量;bool4,表示 bool 类型 4 元向量。

注意:向量长不能超过 4 元,即在 Cg 程序中可以声明 float1、float2、float3、float4 类型的数组变量,但是不能声明超过 4 元的向量,例如:

float5 array;//编译报错 

向量初始化方式一般为:

 float4 array = float4(1.0, 2.0, 3.0, 4.0);

较长的向量还可以通过较短的向量进行构建:

 float2 a = float2(1.0, 1.0); float4 b = float4(a, 0.0, 0.0);

此外,Cg 还提供矩阵数据类型,不过大的维数不能超过 4*4 阶。例如:

float1x1 matrix1; //等价于 float matirx1; x 是字符,并不是乘号!
float2x3 matrix2; // 表示 2*3 阶矩阵,包含 6 个 float 类型数据
float4x2 matrix3; // 表示4*2 阶矩阵,包含 8 个 float 类型数据
float4x4 matrix4; //表示 4*4 阶矩阵,这是大的维数

矩阵的初始化方式为:

 float2x3 matrix5 = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};

注意:Cg 中向量、矩阵与数组是完全不同,向量和矩阵是内置的数据类型(矩阵基于向量),而数组则是一种数据结构,不是内置数据类型!这一点和 C\C++中不太一样,在 C\C++中,这三者同属于数据结构,数组可以构建向量和矩阵。下一节中将详细阐述 Cg 中的数组类型。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

Java随机数算法(一)(r11笔记第14天)

问:如何生成一个随机的字符串?答:让新手退出VIM 。 这可能也是随机字符的一种由来:) 我们今天要说的是随机数算法,这个我策划了好久,但是进展缓慢。...

51870
来自专栏决胜机器学习

《编程之美》读书笔记(一)——中国象棋将帅有效位置

《编程之美》读书笔记(一) ——中国象棋将帅有效位置 (原创内容,转载请注明来源,谢谢) 一、问题 ? 如上述棋盘,假设将为点A,帅为点B。将只能在d10...

43060
来自专栏我的博客

算法复杂度

算法复杂度 分为时间复杂度和空间复杂度。即算法在编写成可执行程序后,运行时所需要的资源,资源包括时间资源和内存资源。 时间复杂度 在计算机科学中,算法的时间复杂...

33360
来自专栏mathor

BFPRT算法

 首先将原数组分成5个一组,每组内进行排序,组间不排序,然后将每组的中位数取出再次进行上述操作,直到最后只能分成一组了,然后取出中位数,将这个中位数当作标尺进行...

14120
来自专栏用户2442861的专栏

**LeetCode—Word Break

http://blog.csdn.net/xietingcandice/article/details/43705383

16820
来自专栏chenjx85的技术专栏

leetcode-633-Sum of Square Numbers

15520
来自专栏人工智能LeadAI

讨厌算法的程序员 1 | 插入排序

什么是算法 在说插入排序之前,我们了解下《算法导论》对算法的从两种不同角度的定义。 一般性解释: 算法是定义良好的计算过程,它取一个或一组值作为输入,并产生出一...

31570
来自专栏TensorFlow从0到N

讨厌算法的程序员 1 - 插入排序

什么是算法 在说插入排序之前,我们了解下《算法导论》对算法的从两种不同角度的定义。 一般性解释: 算法是定义良好的计算过程,它取一个或一组值作为输入,并产生...

35140
来自专栏数据处理

动态规划

11940
来自专栏追不上乌龟的兔子

[多少懂点位运算】续·一行代码解决LeetCode268缺失数字

给定一个包含 0, 1, 2, ..., n 中 n 个数的序列,找出 0 .. n 中没有出现在序列中的那个数。

18740

扫码关注云+社区

领取腾讯云代金券