我的 .OBJ 文件模型加载器有问题。我正在阅读模型,但是在阅读 .mtl 文件时,只有在我对路径进行硬编码时,该文件才会打开。
我检查了给出的路径,它与我硬编码的路径匹配(效果很好)。但是,当我尝试让代码从 .obj 读取路径或只是在代码中构建它时,文件将无法打开。
波纹管是相关的代码。如果我错过了什么,请告诉我,我会提供。
bool ObjLoader::LoadOBJ(const std::string& filename,
const std::string& filePath,
std::vector<Vertex::PosNormal>& vertices,
std::vector<USHORT>& indices,
std::vector<MeshGeometry::Subset>& subsets,
std::vector<OBJMaterial>& mats)
{
std::wifstream fin (filename.c_str()); // <-- .obj path
if (fin)
{
while (fin)
{
// reads in .obj file
// works just fine
// meshMatLib read in from here
}
}
// Close the obj file
fin.close();
fin.clear();
fin.open(meshMatLib); // <-- uses hardcoded path above for /mtl
if (fin) // if the material file is open
{
while (fin)
{
// loads Mtl file
// will not open
}
}
}
下面的行来自 .obj 文件,用于 .mtl 路径。mtllib 模型\testTeapot\testTeapot.mtl
有效的硬编码路径是:
"Models\\testTeapot\\testTeapot.mtl"
它在调用 LoadOBJ 时传递给方法('filePath')
当我对路径进行硬编码时,这有效,这一事实向我表明该问题与路径有关。有没有办法获得有关 std::wifstream 失败原因的更多信息?
提前感谢您的帮助,这已经让我发疯了好几天。