Direct3D多个顶点缓冲区,非交错元素

令人愉快的

我正在尝试创建2个顶点缓冲区,一个仅存储位置,另一个仅存储颜色。这只是Frank Luna的书中的一种练习,用来熟悉顶点描述,布局和缓冲区选项。问题是我感觉已经进行了所有相关更改,尽管我要显示几何图形,但是颜色缓冲区无法正常工作。为了完成本练习,我使用XMFLOAT3,而不是使用示例代码(该示例代码中每个顶点存储位置和颜色)来使用本书的Vertex顶点[] = {{......,{...},...} pos [] = {x,y,z ...}用于位置和XMFLOAT4颜色[] = {a,b,c,...}。我修改了顶点描述,以使每个元素都引用正确的输入点:

D3D11_INPUT_ELEMENT_DESC vertexDesc[] =
    {
        {"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
        {"COLOR",    0, DXGI_FORMAT_R32G32B32A32_FLOAT, 1, 0, D3D11_INPUT_PER_VERTEX_DATA, 0}
    };

我还更改了设备上的顶点缓冲区,以期望有两个顶点缓冲区,而不仅仅是mBoxVB,后者以前是基于Vertex顶点[]的资源:

ID3D11Buffer* mBoxVB;
ID3D11Buffer* mBoxVBCol;
ID3D11Buffer* combined[2];
...
combined[0]=mBoxVB;
combined[1]=mBoxVBCol;
...
UINT stride[] = {sizeof(XMFLOAT3), sizeof(XMFLOAT4)};
UINT offset = 0;
md3dImmediateContext->IASetVertexBuffers(0, 2, combined, stride, &offset);

如果有帮助,这是缓冲区创建代码:

    D3D11_BUFFER_DESC vbd;
    vbd.Usage = D3D11_USAGE_IMMUTABLE;
    vbd.ByteWidth = sizeof(XMFLOAT3)*8;
    vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    vbd.CPUAccessFlags = 0;
    vbd.MiscFlags = 0;
    vbd.StructureByteStride = 0;

    D3D11_SUBRESOURCE_DATA vinitData;
    vinitData.pSysMem = Shapes::boxEx1Pos;
    HR(md3dDevice->CreateBuffer(&vbd, &vinitData, &mBoxVB));

    D3D11_BUFFER_DESC cbd;
    vbd.Usage = D3D11_USAGE_IMMUTABLE;
    vbd.ByteWidth = sizeof(XMFLOAT4)*8;
    vbd.BindFlags = D3D11_BIND_VERTEX_BUFFER;
    vbd.CPUAccessFlags = 0;
    vbd.MiscFlags = 0;
    vbd.StructureByteStride = 0;

    D3D11_SUBRESOURCE_DATA cinitData;
    cinitData.pSysMem = Shapes::boxEx1Col;
    HR(md3dDevice->CreateBuffer(&vbd, &cinitData, &mBoxVBCol));

如果我使用combined [0] = mBoxVBCol,而不是combined [0] = mBoxVB,则会得到不同的形状,所以我知道那里有一些数据,但是我不确定为什么Color元素没有传递到顶点着色器,在我看来,该操作中的第二个位置已被忽略。

令人愉快的

我找到了问题的答案。简而言之,尽管我为两个缓冲区都指定了步幅数组,但我只给出了一个偏移量,所以一旦我改变了UINT offset = 0;到UINT offset [] = {0,0}; 有效。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Direct3D多个顶点缓冲区,非交织元素

来自分类Dev

非交错顶点缓冲区DirectX11

来自分类Dev

如何在Direct3D 11中从CPU访问帧缓冲区?

来自分类Dev

什么是Direct3D 12.0上的“映射默认缓冲区”?

来自分类Dev

如何在Direct3D 11中从CPU访问帧缓冲区?

来自分类Dev

Direct3D 11 中附加/消耗缓冲区的视图

来自分类Dev

使用单个顶点缓冲区还是多个顶点缓冲区?

来自分类Dev

使用单个顶点缓冲区还是多个顶点缓冲区?

来自分类Dev

具有X文件的非相干顶点缓冲区

来自分类Dev

合并顶点缓冲区

来自分类Dev

OpenGL glMultiDrawElementsIndirect与交错缓冲区

来自分类Dev

三.js 缓冲区已经交错

来自分类Dev

Direct2D深度缓冲区

来自分类Dev

Direct2D深度缓冲区

来自分类Dev

OpenGL复制顶点缓冲区对象

来自分类Dev

动态顶点缓冲区创建失败

来自分类Dev

何时清除顶点缓冲区对象

来自分类Dev

Vulkan-顶点缓冲区更新

来自分类Dev

何时清除顶点缓冲区对象

来自分类Dev

OpenGL绘制顶点缓冲区对象

来自分类Dev

OpenGL-从顶点着色器访问缓冲区中的下3个顶点

来自分类Dev

使用 DirectX11 更新非 UI 线程中的顶点缓冲区

来自分类Dev

Direct3D(v10)多个世界转换

来自分类Dev

更改顶点缓冲区对象中的顶点颜色

来自分类Dev

使用SharpDX从DirectX 11中的多个顶点缓冲区进行绘制

来自分类Dev

将多个缓冲区对象与单个顶点数组对象绑定不起作用

来自分类Dev

同一顶点缓冲区对象中有多个网格?

来自分类Dev

'CommandList :: DrawInstanced'如何选择多个插槽中的一个顶点缓冲区?

来自分类Dev

Directx11如何管理多个顶点/索引缓冲区?