私は本当に単純な obj ファイル リーダーを作成しようとしています。これは、obj ファイルからすべての頂点値を順番に 1 つのベクトルに書き込みます (既に実行済みです)。また、obj ファイルからの面の値によって参照される頂点値を別のベクトルに書き込みます。例:
v1 = 0.0 0.0 0.0
v2 = 1.0 0.0 0.0
v3 = 1.0 1.0 0.0
f1 = 3 2 1
私のプログラムは、すべての頂点値を最初のベクトルに順番に書き込み、次に、面を構成する頂点値を次のように 2 番目のベクトルに書き込みます: 1.0 1.0 0.0 1.0 0.0 0.0 0.0 0.0 0.0
最初のベクトル (verticesCoordsXYZ) から値を取得して 2 番目のベクトル (faceCoords) に戻すまで、すべてがうまくいきました。コメントアウトしたコードがプログラムを壊します。最初のベクトルで検索している場所がベクトルのサイズよりも大きいようです (プログラムが中断すると、メモリ位置エラーで out_of_range が発生し、verticesCoordsXYZ のサイズが0)、すべての頂点値でベクトルを埋めましたが。
私は何を間違っていますか?ベクトルがどのように機能するかを理解していないのでしょうか。ベクトルの範囲外ですか? この問題を解決するにはどうすればよいですか?
string line;
while (getline(modelfile, line))
{
string s;
istringstream iss(line);
iss >> s;
vector <float> verticesCoordsXYZ;
vector <float> faceCoords;
if (s == "v")
{
float x, y ,z;
iss >> x >> y >> z;
verticesCoordsXYZ.push_back(x);
verticesCoordsXYZ.push_back(y);
verticesCoordsXYZ.push_back(z);
for (int i = 0; i < (int)verticesCoordsXYZ.size(); i++)
{
cout << verticesCoordsXYZ.at(i);
}
cout << endl;
}
if (s == "f")
{
int a, b, c;
iss >> a >> b >> c;
int aLocation = a * 3 - 3; //vertice locations in verticeCoordsXYZ that would make up faces
int bLocation = b * 3 - 3;
int cLocation = c * 3 - 3;
for (int i = 0; i < 2; i++)
{
//faceCoords.push_back(verticesCoordsXYZ.at(aLocation+i));
}
for (int i = 0; i < 2; i++)
{
//faceCoords.push_back(verticesCoordsXYZ.at(bLocation+i));
}
for (int i = 0; i < 2; i++)
{
//faceCoords.push_back(verticesCoordsXYZ.at(cLocation+i));
}
for (int i = 0; i < (int)faceCoords.size(); i++)
{
cout << faceCoords.at(i) << "f";
}
cout << endl << a << b << c;
}
}
modelfile.close();