2013-04-22 76 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标志着x坐标和\par标志着y坐标。

我写的代码似乎没有工作。

#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 2013-04-22 04:56:40

+0

它可能整天坐在沙发上看电视。无论如何,从你的代码中删除所有GL的东西,你不需要它来演示读取输入文件的问题。对于单行,一次读取浮点数,字符串,浮点数和字符串。检查流状态是否成功以检测例如EOF。然后,验证两个字符串是否是期望的值,并最终处理这两个坐标。 – 2013-04-22 05:06:08

+0

它不绘制我给它的任何数据。我不知道这是因为我读取数据的方式是错误的,或者我的缩放比例是错误的,并且在窗口外绘制点。 – Deafsilver 2013-04-22 05:36:51

回答

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; 
} 
相关问题