CG 数据类型

转载 2015年07月09日 12:19:11

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

shader Cg 基本数据类型

1.基本数据类型:Cg支持7种基本的数据类型,分别是:float, 32 位浮点数据,一个符号位。浮点数据类型被所有的 profile 支持 half,16 为浮点数据 int,32 位整形数据,...
  • u011484013
  • u011484013
  • 2016年11月22日 19:44
  • 1565

数字图像处理、CG与CV

2015-06-17    这段时间工作没有那么忙了,说是没那么忙,我每天还是10点左右才回去的。开始回顾CV方面的知识,按照OpenCV书籍上的例子在学习。发现,经过一段时间的间隔,再次...
  • cloudqiu
  • cloudqiu
  • 2017年02月10日 13:48
  • 560

Cg教程_可编程实时图形权威指南(扫描清晰版)+部分unity shader 知识

Cg教程_可编程实时图形权威指南(扫描清晰版) .pdf (34.5 MB, 下载次数: 239)  Shader Model(在3D图形领域常被简称SM)就是“优化渲染引擎模式”。事实上,...
  • u013100250
  • u013100250
  • 2015年03月07日 00:23
  • 2150

Unity&Shader基础篇-Cg语法

1.2、Cg语法基础   如C++、C#和Java等高级语言一样,Cg语言也有自己的数据类型和关键字。掌握和理解这些关键字是写好Cg程序的基础。 1.2.1、Cg的数据类型与关键字 基本数据类型:Cg...
  • zhangxiao13627093203
  • zhangxiao13627093203
  • 2016年10月18日 17:07
  • 2595

Unity Shader 学习笔记 (三) CG 标准函数库

Unity Shader 学习笔记 (三) CG 标准函数库 1. 数学函数(Mathematical Functions) 2. 几何函数(Geometric Functions) 3. 纹理映...
  • u011416077
  • u011416077
  • 2015年08月16日 00:53
  • 1303

CG标准函数库

本文出处:http://blog.csdn.net/lcbcsdn/article/details/46848125 (1)数学函数 函数 功能描述 ...
  • jingmengshenaaa
  • jingmengshenaaa
  • 2016年10月13日 20:37
  • 1854

共轭梯度方法(CG)MATLAB编程及其和Gauss_Seidel方法的一个比较

共轭梯度方法(CG)MATLAB编程及其和Gauss_Seidel方法的一个比较 共轭梯度法是一种迭代法,不同于Jacobi,Gauss-Seidel和SOR方法。理论上最多n步找到真解,实际计算...
  • lusongno1
  • lusongno1
  • 2017年04月01日 11:44
  • 807

关于CG流程的一点思考

离开动画行业一年之后又回到这个行业。 做了4个月的流程,期间做了公司的一些类似OA,ERP的系统。深深发现,国内的流程依然是那么的乱,尽管有CGTeamwork,ftrack,shotgun之类的流...
  • xdhstc
  • xdhstc
  • 2016年08月02日 12:39
  • 2446

cg profiles,什么是profiles,以及如何使用CGC编译Cg语言

计算机只能理解和执行由0、1序列(电压序列)构成的机器语言,所以汇编语言 和高级语言程序都需要进行翻译才能被计算机所理解,担负这一任务的程序称为语言处理程序,通常也被称为编译程序。例如C或者C++ 编...
  • pizi0475
  • pizi0475
  • 2015年04月22日 10:07
  • 1093

CG行业如何学编程:献给想要学编程的CG孩

很多同行打算学编程,以为编程是技术的最深奥义,但是一个是这个想法有没有跑偏,另一个是学了很久还是不得其门而入,越学越困惑,这很正常,编程不像建模一样直接(当然直接不等于简单),看到的就摆在那里了,所以...
  • cuckon
  • cuckon
  • 2013年06月15日 13:03
  • 6420
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CG 数据类型
举报原因:
原因补充:

(最多只允许输入30个字)