DX11:索引绘图不会产生任何视觉输出

时间:2017-02-16 13:45:47

标签: directx-11 index-buffer

对于我们的学生项目,我一直在修改OBJ-loader,以便将模型导入我们的应用程序。 它加载没有问题,并绘制它种类没有索引(模型显然没有正确表示,因为我没有使用索引缓冲区) 但是,使用DeviceContext->DrawIndexed绘图时屏幕上不会显示任何内容。

Without indexed drawing

With indexed drawing

缓冲区创建方法:

void ObjectLoader::CreateBuffers()
{
    //Index buffer
    D3D11_BUFFER_DESC iBufferDesc;
    memset(&iBufferDesc, 0, sizeof(iBufferDesc));
    iBufferDesc.BindFlags = D3D11_BIND_INDEX_BUFFER;
    iBufferDesc.Usage = D3D11_USAGE_DEFAULT;
    iBufferDesc.ByteWidth = sizeof(DWORD);

    D3D11_SUBRESOURCE_DATA indexData;
    indexData.pSysMem = &ind;
    pDevice->CreateBuffer(&iBufferDesc, &indexData, &pIndexBuffer);


    //Vertex buffer
    D3D11_BUFFER_DESC bufferDesc;
    memset(&bufferDesc, 0, sizeof(bufferDesc));
    bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    bufferDesc.Usage = D3D11_USAGE_DEFAULT;
    bufferDesc.ByteWidth = sizeof(TriangleVertex) * this->NumberOfVerts();

    D3D11_SUBRESOURCE_DATA data;
    data.pSysMem = tva;
    pDevice->CreateBuffer(&bufferDesc, &data, &pVertexBuffer);
}

绘制方法:

void ObjectLoader::Draw()
{
    if (pDevice == nullptr)
        return;

    UINT32 vertexSize = sizeof(float) * 5;
    UINT32 offset = 0;

    pDeviceContext->IASetVertexBuffers(0, 1, &pVertexBuffer, &vertexSize, &offset);
    pDeviceContext->IASetIndexBuffer(this->pIndexBuffer, DXGI_FORMAT_R32_UINT, 0);
    pDeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);

    pDeviceContext->DrawIndexed(vIndex.size(),0 , 0);

    //pDeviceContext->Draw(this->NumberOfVerts(), 0);

}

我到底错过了什么?我看了几本关于索引绘图的书,看起来很简单。起初我认为绕组顺序是颠倒的,但我通过简单地反转索引数组来检查它;同样的结果。

如果你需要更多代码让我知道,但我觉得这应该足够了。

提前致谢!

编辑:OT:我从来没有想过如何让我的代码格式正确,所以我为此道歉,随时分享如何完成。

0 个答案:

没有答案