0

.OBJ ファイルをロードする C++ OpenGL アプリケーションを作成しようとしています。このコードを使用して頂点を読み取ります。

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;
}

基本的に、コードの 2 番目の pice は、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 に答える