前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >5.2 数组类型

5.2 数组类型

作者头像
代码咖啡
发布2018-08-28 10:34:50
3890
发布2018-08-28 10:34:50
举报
文章被收录于专栏:程序员叨叨叨

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

5.2 数组类型

“General-purpose arrays can only be used as uniform parameters to a vertex program. The intent is to allow an application to pass arrays of skinning matrices and arrays of light parameters to a vertex program”(文献【3】的 Array 章节)。

在着色程序中,数组通常的使用目的是:作为从外部应用程序传入大量参数到 Cg 的顶点程序中的形参接口,例如与皮肤形变相关的矩阵数组,或者光照参数数组等。

简而言之,数组数据类型在 Cg 程序中的作用是:作为函数的形参,用于大量数据的转递

Cg 中声明数组变量的方式和 C 语言类似:例如:

代码语言:javascript
复制
float a[10]; //声明了一个数组,包含 10 个 float 类型数据
float4 b[10]; //声明了一个数组,包含 10 个 float4 类型向量数据

对数组进行初始化的方式为:

代码语言:javascript
复制
float a[4] = {1.0, 2.0, 3.0, 4.0}; //初始化一个数组

要获取数组长度,可以调用“.length”,例如:

代码语言:javascript
复制
float a[10]; //声明一个数组
int length = a.length; //获取数组长度

声明多维数组以及初始化的方式如下所示:

代码语言:javascript
复制
float b[2][3] = {{0.0, 0.0, 0.0},{1.0, 1.0, 1.0}}; 

对多维数组取长度的方式为:

代码语言:javascript
复制
int length1 = b.length;  // length1 值为 2
int length2 = b[0].length; // length2 值为 3

数组矩阵有些类似,但是并不是相同。例如 4*4 阶数组的的声明方式为:

代码语言:javascript
复制
float M[4][4];

阶矩阵的声明方式为:

代码语言:javascript
复制
float4x4 M。

前者是一个数据结构,包含 16 个 float 类型数据,后者是一个 4 阶矩阵数据。float4x4 M[4],表示一个数组,包含 4 个 4 阶矩阵数据。

进行数组变量声明时,一定要指定数组长度,除非是作为函数参数而声明的形参数组。并且在当前的 profiles 中,数组的长度和所引用的数组元素的地址必须在编译时就知道。

“Unsized arrays may only be declared as function parameters-they may not be declared as variables. Furthermore, in all current profiles, the actual array length and address calculations implied by array indexing must be known at compile time”(文献 【3】)。

由于形参数组的概念与函数的概念紧密结合,所以将在第 8 章的 8.1 函数章节中进行统一阐述。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.08.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 5.2 数组类型
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档