cg資料類型

來源:互聯網
上載者:User

標籤:api   紋理   浮點   精度   data   是你   bool   tle   位置   

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資料類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.