资源描述:
《Cg(C for Graphcis) 语言基础》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、CG语言基础:(摘抄自《GPU编程与CG语言GPU-Programming-AndCgLanguage-Primer》)概述:Cg(CforGraphcis)语言,是NVIDIA与Microsoft合作研发,旨在为开发人员提供一套方便、跨平台(良好的兼容性),控制可编程图形硬件的高级语言。Cg是一个可以被OpenGL和Direct3D广泛支持的图形处理器编程语言。数据类型:Cg支持7种基本的数据类型:1.float,32位浮点数据,一个符号位。浮点数据类型被所有的profile支持(但是DirectX8pixelprofiles在一些操作中降低了浮点数的精度
2、和范围);2.half,16为浮点数据;3.int,32位整形数据,有些profile会将int类型作为float类型使用;4.fixed,12位定点数,被所有的fragmentprofiles所支持;5.bool,布尔数据,通常用于if和条件操作符(?:),布尔数据类型被所有的profiles支持;6.sampler*,纹理对象的句柄(thehandletoatextureobject)7.string,字符类型,该类型不被当前存在的profile所支持,实际上也没有必要在Cg程序中用到字符类型。向量:Cg程序中可以声明float1、float2、floa
3、t3、float4类型的数组变量,但是不能声明超过4元的向量。向量还可以通过较短的向量进行构建:float2a=float2(1.0,1.0);float4b=float4(a,0.0,0.0);Cg中向量、矩阵与数组是完全不同,向量和矩阵是内置的数据类型(矩阵基于向量),而数组则是一种数据结构,不是内置数据类型!矩阵:Cg还提供矩阵数据类型,不过最大的维数不能超过4*4阶。例如:float1x1matrix1;//等价于floatmatirx1;x是字符,并不是乘号!float2x3matrix2;//表示2*3阶矩阵,包含6个float类型数据float
4、4x2matrix3;//表示4*2阶矩阵,包含8个float类型数据float4x4matrix4;//表示4*4阶矩阵,这是最大的维数。矩阵的初始化方式为:float2x3matrix5={1.0,2.0,3.0,4.0,5.0,6.0};数组:和C里基本一模一样。要获取数组长度,可以调用“.length”,例如:floata[10];//声明一个数组intlength=a.length;//获取数组长度结构体:结构体:目前的Cg语言中的结构体以展现“封装”功能为主,并不支持继承机制。structmyAdd{floatval;floatadd(float
5、x){returnval+x;}};myAdds;使用符号“.”引用结构体中的成员变量和成员函数。例如:floata=s.value;floatb=s.add(a);注意:在当前的所有的profile版本下,如果结构体的一个成员函数使用了成员变量,则该成员变量要声明在前。此外,成员函数是否可以重载依赖于使用的profile版本。structVertexIn{float4position:POSITION;float2textureCoordinates:TEXCOORD0;};输入结构体,带有绑定语义:(BindingSemantics),所谓绑定语义类型是
6、为了与宿主环境进行数据交换的时候识别不同数据类型的。目前Cg支持的绑定语义类型包括POSTION位置),COLOR(颜色),NORMAL(法向量),Texcoord(纹理坐标)等类型。表达式与控制语句:与C语言相同之处:<,<=,!=,==,>=,>,&&,
7、
8、,!,:*乘法;/除法;-取反;+加法;—减法;%求余;++;——;*=;/=;+=;-=注意:1.逻辑操作符也可以对向量使用,返回的变量类型是同样长度的内置bool向量。)2.:Cg中的逻辑与(&&)和逻辑或(
9、
10、)不存在C中的短路现象(short-circuiting,即只用计算一个操作数的boo
11、l值即可),而是参与运算的操作数据都进行bool分析。3.Cg语言对向量的数学操作提供内置支持,即所有数学操作都可以直接用在向量上。4.求余操作符%。只能在int类型数据间进行5.Cg语言中的移位操作符,功能和C语言中的一样,也可以作用在向量上,但是向量类型必须是int类型----不同的是:1.Cg允许在向量类型变量上使用操作符,例如>操作符可以用来比较两个向量各个分量的大小关系例如:float3a=float4(0.5,0.0,1.0);float3b=float4(0.6,-0.1,0.9);bool3c=a
12、e,false,true);2.可以使用Cg语言中的