从OBJ文件C ++读入点

时间:2016-11-02 22:01:35

标签: c++ input object-files

我正在尝试阅读以下OBJ文件

#--- ObjWriter ---
v -0.599972 -0.599972 -0.599972
v -0.304591 -0.834531 0.539150
.
.
.
f 1 2 6 
f 1 6 5 
f 1 5 7 
.
.
.

我正在尝试设置一个函数,它将顶点的值(char v后面的3个值)存储到点矢量(Pt由ax,y和z组成)和a的值face(char f后面的3个值)到另一个面向量(Face由3个int组成)。到目前为止,我已尝试使用以下函数:

void readFile(char *inFile)
{
    ifstream inF(inFile);
    string line;

    while (getline(inF, line))
    {
        if (line[0] == 'v')
        {
            float x, y, z;
            inF >> x >> y >> z;

            // cout << x;

            verts.push_back(Pt(x, y, z));
        }
        else if (line[0] == 'f')
        {
            int x, y, z;
            inF >> x >> y >> z;
            faces.push_back(Face(x, y, z));
        }
        else if (line[0] == '#')
            continue;
    }
}

每当我通过在第一个if语句中显示x值来测试此方法时,我得到值“-858993460”。我该如何修复这个功能?显示了cout线的放置。

1 个答案:

答案 0 :(得分:-1)

而不是编写自己的obj文件阅读器,例如使用assimp(http://www.assimp.org

关于你的代码:你应该在访问索引0处的字符串之前检查行是否为空。 然后,在读取浮点值时,必须首先从行中跳过char(在顶点的情况下为“v”)。例如,您可以将其读入虚拟char变量。 最后,&gt;&gt;更改输入流的状态。例如,您可以使用字符串流并使用当前行初始化它,然后从此流中读取。

这样的事情:

java.io.IOException: Stream closed
    at java.io.BufferedInputStream.getInIfOpen(BufferedInputStream.java:159)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
    at java.io.FilterInputStream.read(FilterInputStream.java:107)
    at com.protonmail.taylor.faebl.development.main.perform(main.java:72)
    at com.protonmail.taylor.faebl.development.main.main(main.java:23)