GPU编程与CG语言

1、GPU图形绘制管线与着色器

程序使用GPU的代码_程序使用GPU的代码


2、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 类型, 除此之外这些类型被所有的 pixel profiles 和 NV40 vertex program profile 所支持( CgUsersManual 30 页)。由此可见,在不远的未来,顶点程序也将广泛支持纹理操作];
7、string。[字符类型,该类型不被当前存在的 profile 所支持,实际上也没有必要在 Cg 程序中用到字符类型,但是你可以通过 Cg runtime API 声明该类型变量,并赋值;因此,该类型变量可以保存 Cg 文件的信息]。

②数组类型。

③结构类型。

④关键字。

[1、uniform。Cg 语言将输入数据流分为两类:Varying inputs,即数据流输入图元信息的各种组成要素。Uniform inputs,表示一些与三维渲染有关的离散信息数据,这些数据通常由应用程序传入,并通常不会随着图元信息的变化而变化,如材质对光的反射信息、运动矩阵等。 ]

[2、const。Cg 语言也提供 const 修辞符,与 C\C++中含义一样,被 const 所修辞的变量在初始化之后不能再去改变它的值。]


3、漫反射与 Lambert 模型

程序使用GPU的代码_纹理映射_02


4、镜面反射与 Phong 模型

Lambert 模型较好地表现了粗糙表面上的光照现象,如石灰粉刷的墙壁、纸张等,但在用于诸如金属材质制成的物体时,则会显得呆板,表现不出光泽,主要原因是该模型没有考虑这些表面的镜面反射效果。一个光滑物体被光照射时,可以在某个方向上看到很强的反射光,这是因为在接近镜面反射角的一个区域内,反射了入射光的全部或绝大部分光强,该现象称为镜面反射。故此, Phong Bui Tuong 提出一个计算镜面反射光强的经验模型。

程序使用GPU的代码_纹理映射_03


5、Blinn-Phong 光照模型

Blinn-Phong光照模型,又称为 Blinn-phong 反射模型 ( Blinn–Phong reflection model)或者 phong 修正模型( modified Phong reflection model)。

程序使用GPU的代码_浮点数_04


6、投影纹理映射

投影纹理映射有两大优点:其一,将纹理与空间顶点进行实时对应,不需要预先在建模软件中生成纹理坐标;其二,使用投影纹理映射,可以有效的避免纹理扭曲现象。


====================================================================================

结束。