DirectX:从结构数组绘制多维数据集

DirectX: Drawing a cube from struct array

本文关键字:数据集 绘制 数组 结构 DirectX      更新时间:2023-10-16

我正在创建一个游戏,并希望在窗口中绘制一个立方体。我完成了一个工作函数,该函数用 obj 文件的顶点内容填充VERTEX结构。但是,将输出结构传递到缓冲区中似乎会输出 1 到 2 个可见顶点(在 D3D_PRIMITIVE_TOPOLOGY_POINTLIST 下,用于调试目的),而整个结构是可打印的。

由于我正在传递原始顶点,我还需要知道什么吗?(使用 DX11)

(绘制三角形。正方形似乎画了一个三角形。(在D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP下))

编辑:

objv= GetObjData(FilePath, 1);
VERTEX *Cup = new VERTEX[objv.size()];
Cup = CreateVertexDS(objv, 1.0f, 1.0f, 1.0f, 1.0f);
int Cupsize=objv.size();
ObjSz=Cupsize; //Debugging purposes, sets a global variable: # of array elements.

顶点被引入,

D3D11_BUFFER_DESC BufferDescription;
ZeroMemory(&BufferDescription, sizeof(BufferDescription));
BufferDescription.Usage                   =D3D11_USAGE_DYNAMIC;
BufferDescription.ByteWidth               =sizeof(VERTEX)*ObjSz; //# of element from obj file.
BufferDescription.BindFlags               =D3D11_BIND_VERTEX_BUFFER;
BufferDescription.CPUAccessFlags          =D3D11_CPU_ACCESS_WRITE;
BufferDescription.MiscFlags               =0;
D3D11_SUBRESOURCE_DATA SRData;
ZeroMemory(&SRData, sizeof(SRData));
SRData.pSysMem=⋓
    Compile_Monitor = Device->CreateBuffer(&BufferDescription, &SRData, &D3DBuffer);
    if(FAILED(Compile_Monitor))
{
   MessageBox(hWnd, L"CreateBuffer() failed. Check for: n Possible Bad or NULL value in D3D11_BUFFER_DESC struct.", 
                    L"Program Error!", 
                    MB_OK);
   PostQuitMessage(0);
}
    D3D11_MAPPED_SUBRESOURCE MappedResource;
    Compile_Monitor = DeviceContext->Map(D3DBuffer, NULL, D3D11_MAP_WRITE_DISCARD, NULL, &MappedResource);
    if(FAILED(Compile_Monitor))
{
   MessageBox(hWnd, L"Map() failed.", 
                    L"Program Error!", 
                    MB_OK);
   PostQuitMessage(0);
}
    memcpy(MappedResource.pData, &Cup, sizeof(Cup));
    DeviceContext->Unmap(D3DBuffer, NULL);
}

数据呈现:

void Render(){
float ColorBlue[] = {0.4f,0.4f,0.4f,1.0f};
DeviceContext->ClearRenderTargetView(RenderTargetView,ColorBlue);
    UINT stride=sizeof(VERTEX);
    UINT Offset=0;
    DeviceContext->IASetVertexBuffers(0,1,&D3DBuffer,&stride,&Offset);
    DeviceContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_POINTLIST);    
DeviceContext->Draw(ObjSz,0);
Swapchain->Present(0,0);
}

如果问题出在加载 obj 文件,请查看以下内容: http://rastertek.com/dx11tut08.html。 这个特定示例从 obj 文件加载数据并将其输出为自己的文件格式,但 ReadFileCountsLoadDataStructures 函数的组合应该完全符合您的要求。 只是fin.close();fout.close();之间的任何东西 LoadDataStructures.

如果问题是渲染VERTEX结构,我也需要它的代码。