DirectX: рисование куба из массива структуры

0

Я создаю игру и собираюсь нарисовать куб в окне. Я выполнил рабочую функцию, которая заполняет структуру VERTEX файла obj. Однако передача выходной структуры в буфер, кажется, выводит от 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);

}
Теги:
render
cube
game-engine
directx

1 ответ

2
Лучший ответ

Если проблема связана с загрузкой файла obj, проверьте это: http://rastertek.com/dx11tut08.html. Этот конкретный пример загружает данные из файла OBJ и выводит его как свой собственный формат файла, но ReadFileCounts и LoadDataStructures функции в сочетании должны делать то, что вы ищете. Только что-нибудь между fin.close(); и fout.close(); в LoadDataStructures.

Если проблема заключается в рендеринге структуры VERTEX, мне также понадобится ее код.

  • 0
    Я обновил, чтобы добавить больше информации.
  • 0
    Вы, сэр, ясновидящие и знающие. Ваша ссылка дает краткое описание порядка вершин: правая система координат Maya по сравнению с форматом Directx. Я собираюсь реализовать это в коде и проверить результаты.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню