【问题标题】:DirectX: Drawing a cube from struct arrayDirectX:从结构数组中绘制立方体
【发布时间】:2014-01-23 08:03:21
【问题描述】:

我正在创建一个游戏,并希望在窗口中绘制一个立方体。我完成了一个用 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);

}

【问题讨论】:

    标签: c++ directx render game-engine cube


    【解决方案1】:

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

    如果问题在于呈现VERTEX 结构,我也需要它的代码。

    【讨论】:

    • 您先生,有千里眼,知识渊博。您的链接让位于有关顶点排序的简要说明:Maya 的右手坐标系与 Directx 格式。我将在代码中实现它并查看结果。
    • @InfinityMachine 我以前从未被称为千里眼。我得查一下:)
    • @InfinityMachine “通过人类已知感官以外的方式(即一种超感官知觉)获取有关物体、人、位置或物理事件的信息的能力。”我挖了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多