Я уже создал объектный ридер, который может хранить данные вершин и грани фигуры в двух отдельных векторах:
void main(){
fstream modelfile("Cube.obj", ios_base::in);
if (modelfile.is_open())
{
vector <float> verticesCoordsXYZ;
vector <float> faceCoords;
string line;
while (getline(modelfile, line))
{
string s;
istringstream iss(line);
iss >> s;if (s == "v")
{
float x, y ,z;
iss >> x >> y >> z;
verticesCoordsXYZ.push_back(x);
verticesCoordsXYZ.push_back(y);
verticesCoordsXYZ.push_back(z);}
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 < 3; i++)
{
faceCoords.push_back(verticesCoordsXYZ.at(aLocation+i));
}
for (int i = 0; i < 3; i++)
{
faceCoords.push_back(verticesCoordsXYZ.at(bLocation+i));
}
for (int i = 0; i < 3; i++)
{
faceCoords.push_back(verticesCoordsXYZ.at(cLocation+i));
}
cout << endl << a << b << c <<endl;
}
}
for (int i = 0; i < (int)verticesCoordsXYZ.size(); i++)
{
cout << verticesCoordsXYZ.at(i);
}
cout << endl << verticesCoordsXYZ.size() << endl;
for (int i = 0; i < (int)faceCoords.size(); i++)
{
cout << faceCoords.at(i);
}
cout << endl << faceCoords.size() << endl;
modelfile.close();
system("pause");
}
Объяснение:
Мне нужно расширить программу так, чтобы она также могла помещать все нормали вершин в вектор по порядку их появления, а все нормали вершин в вектор по порядку их появления в f строках файла obj.
Проблема в том, что в моей текущей версии программы f-строки были написаны только для координат вершин и выглядели следующим образом:
f 1 7 5
но в расширенной версии, используя новый объектный файл, f-строки записываются как для координат вершин, так и для вершинных нормалей и выглядят следующим образом:
f 1 // 2 7 // 2 5 // 2
Это означает, что в моей текущей, более простой версии программы я могу просто использовать этот код для извлечения номиналов: iss >> a >> b >> c;
но я больше не могу этого делать из-за разрезов между значениями.
Вопрос:
Что я могу сделать, чтобы извлечь значения перед косыми чертами в виде целочисленных значений для координат вершин и извлечь значения после косых черт в виде целых чисел для нормалей вершин, избегая косых черт между ними?
Задача ещё не решена.
Других решений пока нет …