c++meshwavefront

Reading Triangle Data Mesh With OBJ Files


I need to load in the vertices of a .obj file in c++. I just copied over the verts from the object I downloaded so I didn't have to worry about texture mapping or anything. I was able to separate it into a single line and get rid of the v but am not able to isolate the x,y,z coordinates so I can assign it to three separate variables.

main.cpp


// ConsoleApplication3.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <memory>
#include <fstream>
#include <string>

using namespace std;

string pos1, pos2, pos3;

int main()
{
    string line;
    ifstream myfile("fox.txt");
    if (myfile.is_open())
    {
        while (getline(myfile, line))
        {
  
            line.erase(std::remove(line.begin(), line.end(), 'v'), line.end());
            cout << line << endl;
        }
        myfile.close();
    }

    else cout << "Unable to open file";

    return 0;


}


fox.txt

v 10.693913 60.403057 33.765018
v -7.016389 46.160694 36.028797
v 9.998714 51.307644 35.496368
v -8.642366 49.095310 35.725204

Solution

  • A simple way to read in the line

    v 10.693913 60.403057 33.765018

    and separate it into 3 different variables is to first read in a char, then read in three doubles:

    ifstream fin("fox.txt");
    
    vector <vector<double>> data; // holds sets of coordinates
    double a, b, c;
    char v;
    
    while(fin >> v >> a >> b >> c){
        data.push_back({a, b, c});
    }
    
    

    If you wanted, you could also use std::stringstream to parse the input into doubles.