我正在尝试编写一个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));
答案 0 :(得分:1)
如果你确定前2个字符没用:
istringstream strm(*coord[i]);
strm.ignore(2);
strm >> tmpx >> tmpy >> tmpz;
vertex.push_back(new coordinate(tmpx, tmpy, tmpz));
答案 1 :(得分:1)
它就像从标准输入中读取一样:
istringstream parser(coord[i]);
char tmp;
parser >> tmp >> tmpx >> tmpy >> tmpz;
(注意:tmp
只是在行的开头吃'v'并且可以忽略 - 或者在初始化流之前/之后将其删除)
答案 2 :(得分:0)
见here。这给了一个很好的例子。用它来调整你的代码