DirectX - 传递给顶点着色器的顶点尺寸

时间:2015-01-11 15:14:42

标签: 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行为(是吗?)我应该在顶点着色器中将w设置为1还是默认情况下DirectX假设为1?

1 个答案:

答案 0 :(得分: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以获取各种示例。