制作模型加载器:读取顶点和纹理后做什么?

Making a Model Loader: What to do after reading the vertices and texture?

我最近在我的 DirectX 11 引擎中开始了一个小项目,目的是制作一个简单的模型加载器。到目前为止,它所做的只是打开具有给定文件路径的文件并准备从中读取。我的问题是,一旦我读取了我的顶点和纹理数据,我该如何处理它来存储它直到渲染时间?我的想法是将这些数据放在一个字符数组中,但这只有在我只加载一个模型或有很多很多字符数组(每个模型一个)的情况下才有效。

我现在的是这样的:

阅读编辑!

在App.cpp中:

virtual void Load(String^ EntryPoint)
{
    std::auto_ptr<ModelLoad> ml(new ModelLoad);

    if (ml->LoadTVF("Triangle.tvf"))
    {
        // Load vertices and texture into a vertex buffer and texture buffer
    }
    else
    {
        MessageDialog Dialog("Failed to load a game model.\n'Triangle.tvf'", "Error");
        Dialog.ShowAsync();
    }
}

并在 ModelLoader.cpp 中 class ModelLoad:

bool LoadTVF(string FP)
{
    ifstream TVFReader;
    TVFReader.open(FP);
    if (TVFReader.is_open())
    {
        // Read vertices and texture
        TVFReader.close();
        return true;
    }
    else
    {
        return false;
    }
}

编辑:

我在这方面做了很多工作,并完成了我的文件 reader。现在,我得到了两个字符串,一个用于纹理路径,一个用于顶点。我会用那些然后...什么?

提前致谢。

通常您在加载时创建 Direct3D 11 顶点缓冲区和索引缓冲区,然后在渲染之前保留它们。保留原始数据的内存副本的主要原因是为了碰撞,使用边界体积或实际上不渲染的简化碰撞网格可以更有效地完成此操作。

DirectX Tool Kit for it's Model implementation for some ideas--which is also on GitHub

注意:这就是为什么大多数游戏不能完全处理 DXGI_ERROR_DEVICE_RESETDXGI_ERROR_DEVICE_REMOVEDPresent 返回的原因,因为在这种情况下,您必须销毁设备并重新创建所有 Direct3D需要原始数据的对象。游戏通常通过显示错误并要求重新加载来响应这些。这些不是正常工作的应用程序中的常见错误,所以这通常没问题。