2015-01-11 223 views
0

我試圖學習directX編程。看不同的教程,有一些關於頂點,我覺得有點反感。DirectX - 傳遞給頂點着色器的頂點的維數

我知道directX使用四個元素(x,y,z,w)的頂點。我看到許多教程(例如http://msdn.microsoft.com/en-us/library/ff729721(v=VS.85).aspx)將XMFLOAT3作爲頂點位置傳遞,省略了w組件。這是如何工作的?假設passin XMFLOAT3或XMFLOAT4不會改變DirectX行爲(true?)我應該在頂點着色器中將w設置爲1還是DirectX默認設置爲1?

回答

0

頂點的內存格式由輸入佈局描述。爲了節省空間,一個通常提供位置作爲3矢量而不是4-向量與.W始終設置爲1

D3D11_INPUT_ELEMENT_DESC[] = 
{ 
    { "SV_Position", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, 
... 
}; 

不是由輸入佈局中指定的任何元件通常被假定爲0,但在HLSL中,像mul(float3,float4x4)這樣的宏已經知道使.w一個隱含1.

對於各種示例,您應該查看DirectX Tool Kit中的VertexTypes.h。