C++ D3D11“U缓冲区描述字节宽度”;“不工作”;

C++ D3D11“U缓冲区描述字节宽度”;“不工作”;,c++,directx,directx-11,C++,Directx,Directx 11,我对Direct3D有一些问题。即顶点缓冲区及其字节宽度成员 我想画两个四边形,所以我创建顶点缓冲区,如下所示: struct Vertex { XMFLOAT3 pos; XMFLOAT3 normal; XMFLOAT2 texCoord; }; .... void GameWindow::CreateVerticesAndBuffer() { Vertex vertices[] = { { XMFLOAT3(-1.0f,

我对Direct3D有一些问题。即顶点缓冲区及其字节宽度成员

我想画两个四边形,所以我创建顶点缓冲区,如下所示:

struct Vertex
{
    XMFLOAT3 pos;
    XMFLOAT3 normal;
    XMFLOAT2 texCoord;
};

    ....

void GameWindow::CreateVerticesAndBuffer()
{
    Vertex vertices[] =
    {
        { XMFLOAT3(-1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f), XMFLOAT2(0.0f, 1.0f) },
        { XMFLOAT3(-1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f), XMFLOAT2(0.0f, 0.0f) },
        { XMFLOAT3(1.0f, 1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f), XMFLOAT2(1.0f, 0.0f) },
        { XMFLOAT3(1.0f, -1.0f, -1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f), XMFLOAT2(1.0f, 1.0f) },

        { XMFLOAT3(-1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f), XMFLOAT2(0.0f, 1.0f) },
        { XMFLOAT3(-1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f), XMFLOAT2(0.0f, 0.0f) },
        { XMFLOAT3(1.0f, 1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f), XMFLOAT2(1.0f, 0.0f) },
        { XMFLOAT3(1.0f, -1.0f, 1.0f), XMFLOAT3(0.0f, 0.0f, -1.0f), XMFLOAT2(1.0f, 1.0f) }
    };

    D3D11_BUFFER_DESC desc;
    ZeroMemory(&desc, sizeof(desc));
    desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    desc.CPUAccessFlags = 0;
    desc.Usage = D3D11_USAGE_DEFAULT; //Will not ever change after creation (??)
    desc.MiscFlags = 0;
    desc.ByteWidth = sizeof(Vertex) * 8;
    desc.StructureByteStride = 0;

    D3D11_SUBRESOURCE_DATA data;
    ZeroMemory(&data, sizeof(data));
    data.pSysMem = vertices;

    HR(device->CreateBuffer(
        &desc,
        &data,
        &vertexBuffer));

    UINT stride = sizeof(Vertex);
    UINT offset = 0;
    deviceContext->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
}
这段代码产生了一些奇怪的结果。由于某种原因,背面被镜像

但是,如果我改变

desc.ByteWidth=sizeof(顶点)*8

desc.ByteWidth=sizeof(顶点)*9

是的

有人知道为什么会这样吗

编辑:这是我的CreateInputLayout:

D3D11_INPUT_ELEMENT_DESC inputDesc[] = {
    { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
    { "NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0  },
    { "TEX", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 24, D3D11_INPUT_PER_VERTEX_DATA, 0  }
};

hRes = device->CreateInputLayout(
    inputDesc,
    ARRAYSIZE(inputDesc),
    vertexShaderSource->GetBufferPointer(),
    vertexShaderSource->GetBufferSize(),
    &vertexInputLayout);

您已经为您的TEX成员指定了
DXGI\u格式\u R32G32B32\u FLOAT
(float3)。将其更改为
DXGI\u格式\u R32G32\u FLOAT
,它应该可以工作。

@ItzWarty为什么假设这是C++/CLI?没有什么东西不是纯C++的。@ ItZWTYT:StultByTeStruts是为了将结构化数据传递给着色器,而不是顶点缓冲区。@分号:你可以发布你的CureTyPosiDead调用吗?@ TriLIN我发布了CurdieIntDebug布局调用。