2 2頂點宣告

2021-08-22 06:52:23 字數 2699 閱讀 7823

2.2

頂點宣告

該小節對頂點宣告的描述絕大多數都取自翁雲兵的《著色器和效果》,該文對頂點宣告的描述是我所見到最詳盡最透徹的,這裡向作者表示敬意:)

到現在為止,我們已經使用自由頂點格式(flexible vertex format

,fvf

)來描述頂點結構中的各分量。但是,在可程式設計管線中,我們的頂點資料可以包含比用fvf

所能表達的多的多的資料。因此,我們通常使用更具表達性的並且更強有力的頂點宣告(vertex declaration

)。注意:我們仍然可以在可程式設計管線中使用fvf

——如果我們的頂點格式可以這樣描述。不管怎樣,這只是為了方便,因為fvf

會在內部被轉換為乙個頂點宣告。

2.2.1

描述頂點宣告

我們將乙個頂點宣告描述為乙個d3dvertexelement9

結構的陣列。d3dvertexelement9

陣列中的每個元素描述了乙個頂點的分量。所以,如果你的頂點結構有三個分量(例如:位置、法線、顏色),那麼其相應的頂點宣告將會被乙個含3

個元素的d3dvertexelement9

結構陣列描述。

d3dvertexelement9

結構定義如下:

typedef struct _d3dvertexelement9 d3dvertexelement9; ²

stream

——指定關聯到頂點分量的流;

²offset

——偏移,按位元組,相對於頂點結構成員的頂點分量的開始。例如,如果頂點結構是:

struct vertex ;

……pos

分量的偏移是0

,因為它是第乙個分量;normal

分量的偏移是12

,因為sizeof(pos) == 12

。換句話說,normal

分量以vertex

的第12

個位元組為開始。

²type

——指定資料型別。它可以是d3ddecltype

列舉型別的任意成員;完整列表請參見文件。常用型別如下:

d3ddecltype_float1

——浮點數值

d3ddecltype_float2

——2d

浮點向量

d3ddecltype_float3

——3d

浮點向量

d3ddecltype_float4

——4d

浮點向量

d3ddecltype_d3dcolor—d3dcolor

型別,它擴充套件為rgba

浮點顏色向量(r, g, b, a)

,其每一分量都是歸一化到區間[0, 1]

了的。²

method

——指定網格化方法。我們認為這個引數是高階的,因此我們使用預設值,標識為d3ddeclmethod_default。²

usage

——指定已計畫的對頂點分量的使用。例如,它是否準備用於乙個位置向量、法線向量、紋理座標等,

有效的用途識別符號(usage identifier

)是d3ddeclusage

列舉型別的:

typedef enum _d3ddeclusage d3ddeclusage;

其中,d3ddeclusage_psize

型別用於指定乙個頂點的點的大小。它用於點精靈,因此我們可以基於每個頂點控制其大小。乙個d3ddeclusage_position

成員的頂點宣告意味著這個頂點已經被變換,它通知圖形卡不要把這個頂點送到頂點處理階段(變形和光照)。

²usageindex

——用於標識多個相同用途的頂點分量。這個用途索引是位於區間[0, 15]

間的乙個整數。例如,假設我們有三個用途為d3ddeclusage_normal

的頂點分量。我們可以為第乙個指定用途索引為0

,為第二個指定用途索引為1

,並且為第三個指定用途索引為2

。按這種方式,我們可以通過其用途索引標識每個特定的法線。

例:假設我們想要描述的頂點格式由兩個資料流組成,第乙個資料流包含位置、法線、紋理座標3

個分量,第二個資料流包含位置和紋理座標2

個分量,頂點宣告可以指定如下:

d3dvertexelement9 decl =,,

,//第乙個資料流,包含分量位置、紋理座標 ,

, d3ddecl_end()

};d3ddecl_end

巨集用於初始化d3dvertexelement9

陣列的最後乙個頂點元素。

2.2.2建立頂點宣告

createvertexdeclaration

函式用於建立頂點宣告,decl

為指向上一小節定義的d3dvertexelement9

陣列的指標,函式返回idirect3dvertexdeclaration9

指標g_decl;

idirect3dvertexdeclaration9 *g_decl = null;

g_pd3ddevice->createvertexdeclaration(decl ,&g_decl);

2.2.3設定頂點宣告

g_pd3ddevice->setvertexdeclaration(g_decl);

至此,可程式設計資料流模型、頂點宣告介紹完畢,在下面的例子中讀者將會有更連貫的理解。

Unity Shader (四)頂點程式示例

1 在頂點函式中實現凸起效果 2 漸變及溜光效果 3 頂點扭曲效果 旋轉矩陣去影響頂點 優化繞y軸旋轉的矩陣,除去0與其他項相乘的項 float x cos angle v.vertex.x sin angle v.vertex.z float z sin angle v.vertex.x cos ...

opengl 教程 9 頂點屬性插值

本章我們了解3d管線的乙個重要特性,在光柵化階段的頂點屬性插值。從前面的教程我們知道,為了在螢幕上輸出渲染的物體,我們在頂點shader中輸出gl position,這是乙個四維向量,表示齊次空間的頂點座標,x,y,z都經過了透視除法,除以了w值,x y的範圍是 1,1 而z的範圍是 0,1 而w則...

opengl 教程 9 頂點屬性插值

本章我們了解3d管線的乙個重要特性,在光柵化階段的頂點屬性插值。從前面的教程我們知道,為了在螢幕上輸出渲染的物體,我們在頂點shader中輸出gl position,這是乙個四維向量,表示齊次空間的頂點座標,x,y,z都經過了透視除法,除以了w值,x y的範圍是 1,1 而z的範圍是 0,1 而w則...