0

我正在尝试编写一个 c++ opengl 应用程序来加载 .OBJ 文件,我使用此代码来读取顶点:

char buf[256];
while(!objFile.eof())
{
    objFile.getline(buf,256);
    coordinates.push_back(new std::string(buf));
}

else if ((*coordinates[i])[0]=='v' && (*coordinates[i])[1]==' ')
{
    float tmpx,tmpy,tmpz;
    sscanf(coord[i]->c_str(),"v %f %f %f",&tmpx,&tmpy,&tmpz);
    vertex.push_back(new coordinate(tmpx,tmpy,tmpz));
    cout << "v " << tmpx << " " << tmpy << " " << tmpz << endl;
}

所以基本上第二段代码会解析 obj 文件中的顶点行

v 1.457272 0.282729 -0.929271

我的问题是如何使用istringstream 下面的代码在 c++ 语法中的转换来解析这个顶点线 c++ 样式

sscanf(coord[i]->c_str(),"v %f %f %f",&tmpx,&tmpy,&tmpz);
    vertex.push_back(new coordinate(tmpx,tmpy,tmpz));
4

3 回答 3

1

如果您确定前 2 个字符无用:

istringstream strm(*coord[i]);
strm.ignore(2);
strm >> tmpx >> tmpy >> tmpz;
vertex.push_back(new coordinate(tmpx, tmpy, tmpz));
于 2012-07-25T14:22:33.370 回答
1

它就像从标准输入中读取一样工作:

istringstream parser(coord[i]);
char tmp;
parser >> tmp >> tmpx >> tmpy >> tmpz;

(注意:tmp只是在行首吃'v'并且可以忽略 - 或者在初始化流之前/同时将其剪掉)

于 2012-07-25T14:23:24.657 回答
0

这里。这是一个很好的例子。使用它来调整您的代码

于 2012-07-25T14:21:13.443 回答