天天看點

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 的頂點程式中的形參接口,例如與皮膚形變相關的矩陣數組,或者光照參數數組等。

簡而言之,數組資料類型在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

繼續閱讀