我最近在DirectX 11引擎中开始了一个小项目,即制作一个简单的模型加载器。到目前为止,它所做的只是打开具有给定文件路径的文件并准备从中读取。我的问题是,一旦我读取了我的顶点和纹理数据,我该如何处理它直到渲染时间?我的想法是将这些数据放在一个char数组中,但这只有在我只加载一个模型,或者有很多很多char数组(每个模型一个)时才有效。
我现在拥有的是:
阅读编辑!
在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();
}
}
在ModelLoad类的ModelLoader.cpp中:
bool LoadTVF(string FP)
{
ifstream TVFReader;
TVFReader.open(FP);
if (TVFReader.is_open())
{
// Read vertices and texture
TVFReader.close();
return true;
}
else
{
return false;
}
}
修改
我对此工作了很多,并完成了我的文件阅读器。现在,我最终得到两个字符串,一个用于纹理路径,另一个用于顶点。我会用那些然后......什么?
提前致谢。
答案 0 :(得分:2)
通常,您在加载时创建Direct3D 11顶点缓冲区和索引缓冲区,然后保持它们直到渲染。保留原始数据的内存副本的主要原因是用于冲突,使用您实际不呈现的边界体积或简化的碰撞网格可以更有效地完成此操作。
请参阅DirectX Tool Kit了解Model
某些想法的实施情况 - 这也是GitHub
注意:这就是大多数游戏无法完全处理从DXGI_ERROR_DEVICE_RESET
回来的DXGI_ERROR_DEVICE_REMOVED
或Present
的原因,因为在这种情况下你必须销毁设备并重新创建所有Direct3D对象需要拥有原始数据。游戏通常通过显示错误并需要重新加载来响应这些。这些在正常工作的应用程序中不是常见错误,所以这通常很好。