DirectX - 传递给顶点着色器的顶点维度

DirectX - dimension of vertices passed to the vertex shader

我正在尝试学习 directX 编程。查看不同的教程,我发现关于顶点的一些内容有点令人困惑。

我知道 directX 使用具有四个元素 (x,y,z,w) 的顶点。我看到许多教程(示例 http://msdn.microsoft.com/en-us/library/ff729721(v=VS.85).aspx )将 XMFLOAT3 作为顶点位置传递,省略了 w 组件。这是如何工作的?假设传递 XMFLOAT3 或 XMFLOAT4 不会改变 DirectX 行为(是吗?)我应该在顶点着色器中将 w 设置为 1 还是 DirectX 假定它默认为 1?

顶点的内存格式由输入布局描述。为了保存 space,通常将位置提供为 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 以了解各种示例。