2015-01-11 185 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。