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則...