cg数据类型
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
cg数据类型的更多相关文章
- float4与half4数据类型
连续4个32位float类型数的向量 HLSL数据类型 GPU是以四维向量为基本单位来计算的.4个浮点数所组成的float4向量是GPU内置的最基本类型.使用GPU对两个float4向量进行计算,与C ...
- [Unity] Shader - CG语言 和 HLSL语言
CG 跟 HLSL几乎是一摸一样的. (HLSL官方参考,包含语法格式,函数库,关键字,在这个地方: http://msdn.microsoft.com/en-us/library/bb509638( ...
- 解读Unity中的CG编写Shader系列一
转自http://www.itnose.net/detail/6095323.html 前提知识点: 1.CG代码必须用 CGPROGRAM ... ENDCG括起来 2.顶点着色器与片段着色器的主函 ...
- 【Unity Shaders】学习笔记——SurfaceShader(二)两个结构体和CG类型
[Unity Shaders]学习笔记——SurfaceShader(二)两个结构体和CG类型 转载请注明出处:http://www.cnblogs.com/-867259206/p/5596698. ...
- Python 安装、循环语句、数据类型(一)
一.关于版本的选择 Should i use Python 2 or Python 3 for my development activity?转载自Python官网 Short version: P ...
- C语言入门:04.数据类型、常量、变量
一.数据 1.什么是数据 生活中时时刻刻都在跟数据打交道,比如体重数据.血压数据.股价数据等.在我们使用计算机的过程中,会接触到各种各样的数据,有文档数据.图片数据.视频数据,还有聊QQ时产生的文字数 ...
- 关于Unity中Cg的基本语法和使用
Cg是类似于C语言的发展起来的图形编程语言,Cgraphics,它的很多表达式if...else...和C语言非常相像,也和C#非常相像. 由于Shader是写给显卡执行的,所以没有输出语句来调试,很 ...
- ajax——三级联动下拉列表框的优化(简化页面,用jquery插件代替原来页面代码,返回处理数据类型为"TEXT")
数据库: 主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww ...
- [转]解读Unity中的CG编写Shader系列1——初识CG
CG=C for Graphics 用于计算机图形编程的C语言超集 前提知识点: 1.CG代码必须用 CGPROGRAM ... ENDCG括起来 2.顶点着色器与片段着色器的主函数名称可随意,但需 ...
随机推荐
- TCP三次握手的正确使用姿势
背景 和女朋友异地恋一年多,为了保持感情我提议每天晚上视频聊天一次. 从好上开始,到现在,一年多也算坚持下来了. 问题 有时候聊天的过程中,我的网络或者她的网络可能会不好,视频就会卡住,听不到对方的声 ...
- react+redux教程(五)异步、单一state树结构、componentWillReceiveProps
今天,我们要讲解的是异步.单一state树结构.componentWillReceiveProps这三个知识点. 例子 这个例子是官方的例子,主要是从Reddit中请求新闻列表来显示,可以切换reac ...
- Hibernate(2)——Hibernate的实现原理总结和对其模仿的demo
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的知识点总结如下: 开源框架的学习思路(个人总结) Hibernate的运行原理总结 Hibernate实现原理中的两个主要技术 ...
- Linux平台 Oracle 11gR2 RAC安装Part2:GI安装
三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面安装GI 3 ...
- WebGIS中快速整合管理多源矢量服务以及服务权限控制的一种设计思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 在真实项目中,往往GIS服务数据源被其他多个信息中心或者第三方 ...
- RepositoryBase文件解析
public class RepositoryBase<T> : IRepository<T> where T : class RepositoryBase 是IReposit ...
- 如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
1.前言 关于微信内部正在使用的网络层封装库Mars开源的消息,1个多月前就已满天飞(参见<微信Mars:微信内部正在使用的网络层封装库,即将开源>),不过微信团队没有失约,微信Mars ...
- 用SignalR 2.0开发客服系统[系列2:实现聊天室]
前言 交流群:195866844 上周发表了 用SignalR 2.0开发客服系统[系列1:实现群发通讯] 这篇文章,得到了很多帮助和鼓励,小弟在此真心的感谢大家的支持.. 这周继续系列2,实现聊天室 ...
- [Tool] Open Live Writer插件开发
一 前言 Windows Live Writer(简称 WLW)开源之后变成 Open Live Writer(简称 OLW),原先 WLW 的插件在 OLW 下都不能用了,原因很简单,WLW 插件开 ...
- C# - 集合类
C#的集合类命名空间介绍: // 程序集 mscorlib.dll System.dll System.Core.dll // 命名空间 using System.Collections:集合的接口和 ...