0

我们一直在创建一个非常基本的模型加载器。代码本身如下;主要问题是当字符串流检测到“f”作为第一个字符时。为了调试,代码被过度简化(一开始有点复杂)。目前, cout << ind3; 给出 0。它应该读取 2 或 5,具体取决于阅读器所在的行。这两个向量参数用于写入以进行绘图,但此时我已删除此操作。

两个“f”行是: f 0 1 2 f 3 4 5

该程序可以很好地读取 v (顶点)行;它不会在 f 行中读取。

bool modelLoader(string fileName,vector<GLfloat>& vertices, vector<GLushort>& indices)
{
vector<GLfloat> localVertices;
ifstream objFile;
string line,testline;
stringstream ss;

GLfloat x, y, z;
//GLushort ind1, ind2, ind3; Excluded for testing
int ind1=0, ind2=0, ind3=0; 
objFile.open(fileName);
if (!objFile.is_open())
{
    cout << "FAILED TO LOAD: OBJ FILE\n";

    return false;
}

while ( objFile.good() )
{
    getline(objFile, line);
    ss.str(line);

    if (line == "")
    {
        continue;
    }

    else if(line[0] == 'v')
    {
        ss.ignore(2);
        ss >> x >> y >> z;
        localVertices.push_back(x);
        localVertices.push_back(y);
        localVertices.push_back(z);
    }

    else if (line[0] == 'f')
    {
        cout<<ss.str()<<endl; // for debug
        ss.ignore(6); // To skip 'f 0 1 ' and get purely a 2. Was originally
                    // set to ss.ignore(2) when reading in all 3 values.
        cout<<ss.str()<<endl; // for debug
        ss >> ind3;
        cout << ind3 << endl; 
    }
}
objFile.close();
cout << "Reader success.\n";
return true;
}

有谁知道为什么这三个 inds 被读为平 0?也不是我已经将它们初始化为 0 - 在它们都根据使用的类型读取一个大的负数之前,这并不能说明太多。

4

1 回答 1

0

字符串流可能设置了错误标志 (EOF),这将阻止格式化输入。在流上调用 str() 不会重置标志。

调用 str() 后,调用 clear() 清除标志。

于 2013-01-17T13:13:41.873 回答