.objファイルを解析しようとしていますが、ファイルを解析しvec3とintベクトルにそれぞれ格納しました。ベクトルインデックスを別のベクトルで参照しているときにエラーが発生しました: 'std :: out_of_range in memory location'
しかし、私がaitVertex
構造体を作成するときに、頂点と法線に対応する面を使ってすべてをリンクすると、次の "std :: out_of_range in memory location"が得られます。ここで
は、関連するコードです:
bool aitMesh::loadFromObj(std::string path)
{
//Setup vars etc...
//std::vector<float> tempVertices;
//std::vector<float> tempNormals;
float Vertex[3];
float Normal[3];
int Index[6];
std::vector<glm::vec3> tempVertices;
std::vector<glm::vec3> tempNormals;
std::vector<int> tempIndices;
if (name == "v")
{
//sscanf_s matches a sequence of non-whitespace characters
//line.c_str returns a pointer to an array that contains a string..
//in this case and stores in Vertex[1,2,3]
sscanf_s(line.c_str(), "%*s %f %f %f", &Vertex[0], &Vertex[1], &Vertex[2]);
std::cout << "Line: " << line << "\n";
std::cout << "Name: " << name << "\n";
//Adds to tempVertices Array
//tempVertices.push_back(Vertex[0]);
//tempVertices.push_back(Vertex[1]);
//tempVertices.push_back(Vertex[2]);
tempVertices.push_back(glm::vec3(Vertex[0], Vertex[1], Vertex[2]));
continue;
}
if (name == "vn")
{
sscanf_s(line.c_str(), "%*s %f %f %f", &Normal[0], &Normal[1], &Normal[2]);
std::cout << "Line: " << line << "\n";
std::cout << "Name: " << name << "\n";
//tempNormals.push_back(Normal[0]);
//tempNormals.push_back(Normal[1]);
//tempNormals.push_back(Normal[2]);
tempNormals.push_back(glm::vec3(Normal[0], Normal[1], Normal[2]));
continue;
}
if (name == "s")
{
continue;
}
if (name == "f")
{
sscanf_s(line.c_str(), "%*s %d//%d %d//%d %d//%d", &Index[0], &Index[1], &Index[2], &Index[3], &Index[4], &Index[5]);
std::cout << "Line: " << line << "\n";
std::cout << "Name: " << name << "\n";
tempIndices.push_back(Index[0]);
tempIndices.push_back(Index[1]);
tempIndices.push_back(Index[2]);
tempIndices.push_back(Index[3]);
tempIndices.push_back(Index[4]);
tempIndices.push_back(Index[5]);
}
for (int i = 2; i <= tempIndices.size(); i++)
{
if (i % 2 == 0)
{
vertices.push_back(aitVertex(tempVertices.at(tempIndices[i-2]), tempNormals.at(tempIndices[i-1])));
}
}
私のプログラムは、上の破壊された行は
vertices.push_back(aitVertex(tempVertices.at(tempIndices[i-2]), tempNormals.at(tempIndices[i-1])));
である私は、私はその上tempIndices[i-2]
を印刷しようとするとtempIndices
を参照するときに問題があると思いますそれは上に印刷する必要があります..
私はちょうどそれを間違って参照していますか?
この行は 'tempIndices.size()== 0 'なので、実際には実行されません。ここに表示されるコードでは変更されません。私は[mcve]を作成する方法をお読みください – user463035818
Apologies @ tobi303私は説明するためのコードを追加する必要があります。 上記を編集してより多くを含めると、tempIndicesに値が設定されていることを確認でき、tempIndices.size()を独自に出力して6を期待通りに出力できます。 ご返信ありがとうございます –