关闭

CG基础01-原理->数据类型

标签: CG
129人阅读 评论(0) 收藏 举报
分类:

CG图形绘制管线的三个阶段:

1.应用程序阶段

2.几何阶段 :主要负责顶点坐标变换、光照、裁剪、投影以及屏幕映射

3.光栅化阶段:决定哪些像素被集合图元覆盖的过程(Rasterization is the process of 
determining the set of pixels covered by a geometric primitive) 。经过上面诸多坐标
转换之后,现在我们得到了每个点的屏幕坐标值(Screen coordinate) ,也知道我
们需要绘制的图元(点、线、面)

问题二涉及到具体的画线算法,以及区域图元填充算法。通常的画线算
法有 DDA 算法、Bresenham画线算法;区域图元填充算法有,扫描线多边形填
充算法、边界填充算法等,具体请参阅《计算机图形学(第二版) 》第 3 章。 
这个过程结束之后,顶点(vertex)以及绘制图元(线、面)已经对应到像素
(pixel)。下面阐述的是“如何处理像素,即:给像素赋予颜色值”。

Pixel operation又称为 Raster Operation(在文献【2】中是使用 Raster 
Operation) ,是在更新帧缓存之前,执行最后一系列针对每个片段的操作,其目
的是:计算出每个像素的颜色值。在这个阶段,被遮挡面通过一个被称为深度测
试的过程而消除,这其中包含了很多种计算颜色的方法以及技术。Pixel operation
包含哪些事情呢? 
1:消除遮挡面 
2:Texture operation,纹理操作,也就是根据像素的纹理坐标,查询对应的
纹理值; 
3:Blending  29
   混色,根据目前已经画好的颜色,与正在计算的颜色的透明度(Alpha) ,
混合为两种颜色,作为新的颜色输出。通常称之为alpha混合技术。  当在屏幕
上绘制某个物体时,与每个像素都相关联的哟一个RGB 颜色值和一个 Z缓冲器
深度值,另外一个称为是alpha 值,可以根据需要生成并存储,用来描述给定像
素处的物体透明度。如果alpha 值为1.0,则表示物体不透明;如果值为 0,表示
该物体是透明的,




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类型, 除此之外这些类型被所有的 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};


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2781次
    • 积分:78
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:2篇
    • 译文:1篇
    • 评论:0条
    文章分类