1

我的 .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 失败原因的更多信息?

提前感谢您的帮助,这已经让我发疯了好几天。

4

0 回答 0