2013-04-22 2 views
0

Я пытаюсь написать программу на C++ с OpenGL, которая считывает данные из файла и масштабирует, затем отображает данные.Чтение точек точек из файла, а затем масштабирование

Данные в файле настройки, как, например:

 
0.017453293\tab 2.01623406\par 
0.087266463\tab 2.056771249\par 
0.191986218\tab 2.045176705\par 
0.27925268\tab 1.971733548\par 

\tab с означающий координаты х и \par означающий у-координату.

Код, который я написал, похоже, не работает.

#include "stdafx.h" 
    #include <stdlib.h> 
    #define _USE_MATH_DEFINES 
    #include <math.h> 
    #include "glut.h" 
    #include <iostream> 
    #include <string> 
    #include <fstream> 

    int _tmain(int argc, char **argv) { 
     void myInit(void); 
     void myDisplay(void); 
     glutInit(&argc, argv); 
     glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 
     glutInitWindowSize(640, 480); 
     glutInitWindowPosition(100, 150); 
     glutCreateWindow("CMPS389 HW2"); 
     glutDisplayFunc(myDisplay); 
     myInit(); 
     glutMainLoop(); 
    } 

    void myInit(void) { 
     glClearColor(0.0, 0.0, 0.0, 0.0); 
     glColor3f(1.0, 1.0, 1.0); 
     glPointSize(4.0); 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     gluOrtho2D(0.0, 640.0, 0.0, 480.0); 
    } 

    void myDisplay(void) { 
     glClear(GL_COLOR_BUFFER_BIT); 
     std::string words = ""; 
     float locX; 
     float locY; 

     std::ifstream fileN("curveData.txt"); 

     while(fileN != NULL) { 
      fileN>>words; 

      if (words == "\par") { 
          fileN>>locX; 
      } 
      if (words == "\tab") { 
       fileN>>locY; 
       glBegin(GL_LINES); 
        glVertex2f(locX*300, locY*300); 
       glEnd(); 
      } 
     glFlush(); 
     } 
    } 
+6

Что вы подразумеваете под ", похоже, не работает"? Не работает как? Неверный результат? Сбои? Появляются единороги? – Bart

+0

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

+0

Он не содержит никаких данных, которые я им даю. Я не знаю, связано ли это с тем, что то, как я читаю данные, неверно, или если мое масштабирование ошибочно и рисует точки за пределами окна. – Deafsilver

ответ

1

Вам нужно действительно отрезать эту спину. Я собираюсь сосредоточиться на части синтаксического разбора файлов. Вот один из способов решения этой проблемы. Обратите внимание, что следующее не проверяет суффиксы \ tab или \ par. Если вам действительно нужно, что вы можете добавить это сами.

#include <fstream> 
#include <iostream> 
#include <string> 
#include <iterator> 

struct position 
{ 
    double x; 
    double y; 
}; 

std::istream& operator>>(std::istream& in, position& p) 
{ 
    std::string terminator; 
    in >> p.x; 
    in >> terminator; 
    in >> p.y; 
    in >> terminator; 

    return in; 
} 

int main() 
{ 
    std::fstream file("c:\\temp\\testinput.txt"); 
    std::vector<position> data((std::istream_iterator<position>(file)), std::istream_iterator<position>()); 

    for(auto p : data) 
     std::cout << "X: " << p.x << " Y: " << p.y << "\n"; 
    system("PAUSE"); 
    return 0; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^