vector — Создание простого читателя obj в c ++, который читает вершины, нормали вершин и грани для обоих

Я уже создал объектный ридер, который может хранить данные вершин и грани фигуры в двух отдельных векторах:

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;

но я больше не могу этого делать из-за разрезов между значениями.

Вопрос:

Что я могу сделать, чтобы извлечь значения перед косыми чертами в виде целочисленных значений для координат вершин и извлечь значения после косых черт в виде целых чисел для нормалей вершин, избегая косых черт между ними?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]