Проблема в реализации парсера .obj файлов в Qt

Пробую написать парсер для .obj файлов в Qt. Пока пытаюсь взять из файла координаты и вывести их в Qt. Вроде бы все хорошо, но нужно заменить точку на запятую, пишу подобный код, но в итоге числа просто выводятся целые.

Также при проверке увидел, что первые три числа в неправильном формате, и числа не те при проверке, как в файле.

Как это дело можно исправить?

PS Делаю по видео: https://www.youtube.com/watch?v=_QOY3LRpK8U

Пример кода:

v -61.702400 -10.384300 19.096399
v -61.688599 -10.584200 19.090099
v -61.706699 -10.392700 19.297800
v 63.285301 9.466500 -24.145901
v 63.330898 9.278900 -24.356501
v 63.286201 9.474400 -24.347000
v -60.736301 -7.307700 11.027200
v -60.924599 -7.338100 11.127200
v -60.976101 -6.943100 11.180100
v -61.700500 -10.795700 19.287701
v -60.253300 -30.198000 24.508400
v -60.469601 -30.213600 24.128901
v -60.358601 -30.407301 24.313601
v 63.207500 8.932300 -10.668100
v 63.238400 8.727000 -10.475100
for(int j=0; j<10; j++, i++){ //Координата x
    if (line.at(i)=='.'){ //Замена точек на запятую в координатах
        crd[j]=',';
        continue;
    }

Полный код, файл obj.loader.h:

#ifndef OBJ_LOADER_H
#define OBJ_LOADER_H

#include <QWidget>
#include <QtOpenGL>
#include<vector>
#include<string>
#include<stdlib.h>

class obj_loader : public QWidget
{
    Q_OBJECT

public:
    obj_loader(QWidget *parent = nullptr);
    ~obj_loader();

private:
    std::string fdata;
    void init_fdata();
    void init_vertex();
    void parse_line(const std::string&);
    void chk_vertex_vec();

    struct coord{
    float x,y,z;
    };
std::vector<coord> vertex_vec;

protected:
    void initializeGL();
    void resizeGL(int w, int h);
    void paintGL();
};
#endif // OBJ_LOADER_H

Файл obj_loader.cpp

#include "obj_loader.h"
#include<fstream>
#include<QDebug>
#include <QtOpenGL>
#include<stdlib.h>


obj_loader::obj_loader(QWidget *parent)
    : QWidget(parent)
{
    init_fdata();
}

obj_loader::~obj_loader()
{
}

void obj_loader::initializeGL()
{
glClearColor(0,0,0,0);
glEnable(GL_DEPTH_TEST);
}

void obj_loader::resizeGL(int w, int h)
{
   glMatrixMode(GL_PROJECTION);
   glLoadIdentity();
   glViewport(0,0,w,h);
   glOrtho(-5,5,-5,5,-5,5);
}

void obj_loader::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void obj_loader::init_fdata()
{
 std::ifstream ifile("C:/Users/user/obj_loader/compressor.obj");

 while (ifile.good()){
fdata.push_back(ifile.get());
 }

 ifile.close();

init_vertex();
chk_vertex_vec();
}

void obj_loader::init_vertex()
{
std::string line;
for (int i=0;i<fdata.size();i++)
{
    line.push_back(fdata.at(i));
    if (fdata.at(i)=='\n') {
       //qDebug()<<QString::fromStdString(line);
       parse_line(line);
       line.clear();
    }
}
}

void obj_loader::parse_line(const std::string &line){
    coord curr_c;

for (int i=0;i<line.size();i++){
if (line.at(0)=='v' && line.at(1)==' '){
   i+=2;
   char crd[10];
   for (int _i=0; _i<10; _i++)
       crd[_i]=0;

   for(int j=0; j<10; j++, i++){ //Координата x
       if (line.at(i)=='.'){ //Замена точек на запятую в координатах
           crd[j]=',';
           continue;
       }
       crd[j]=line.at(i);
       if (line.at(i)==' '){
i++;
           curr_c.x = atof(crd);
           for (int _i=0; _i<10; _i++)
               crd[_i]=0;
           break;
       }
   }
   for(int j=0; j<10;j++, i++){ //Координата y
       if (line.at(i)=='.'){ //Замена точек на запятую в координатах
           crd[j]=',';
           continue;
       }
       crd[j]=line.at(i);
       if (line.at(i)==' '){
           i++;
           curr_c.y = atof(crd);
           for (int _i=0; _i<10; _i++)
               crd[_i]=0  ;
           break;
       }
   }
   for(int j=0; j<10;j++, i++){ //Координата z
       if (line.at(i)=='.'){ //Замена точек на запятую в координатах
           crd[j]=',';
           continue;
       }
       crd[j]=line.at(i);
       if (line.at(i)==' '||line.at(i)=='\n'){
           curr_c.z = atof(crd);
           break;
       }
   }
 vertex_vec.push_back(curr_c);
 return;
}
}
}

void obj_loader::chk_vertex_vec(){
for (int i=0; i<vertex_vec.size(); i++){
    qDebug()<<"X="<<vertex_vec.at(i).x<<" Y="<<vertex_vec.at(i).y<<" Z="<<vertex_vec.at(i).z<<'\n';
}
}

Ответы (0 шт):