Ifstream 不适用于 OpenGL/freeglut

Ifstream doesn't work with OpenGL/freeglut

本文关键字:freeglut OpenGL 适用于 不适用 Ifstream      更新时间:2023-10-16

如果在OpenGL/freeglut中尝试使用ifstream,程序将崩溃。我的代码:

#include <fstream>
#include <windows.h>
#include <GL/freeglut.h>
double x, y;
std::ifstream read("coordinates.txt");
void display() {
    glBegin(GL_LINE_STRIP);
        while (read >> x) //Crashes here
        {
            read >> y;
            glVertex2d(x, y);
        }
    glEnd();
    glFlush();
}
void key(unsigned char mychar, int x, int y) {
    if (mychar == 27) {
        exit(0);
    }
}
void initialize()
{
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-27, 27, -27, 27);
}
int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
    glutInitWindowSize(1920, 1080);
    glutInitWindowPosition(0, 0);
    glutCreateWindow("Lorenz Attractor");
    initialize();
    glutDisplayFunc(display);
    glutKeyboardFunc(key);
    glColor3d(0, 0, 1);
    glutFullScreen();
    glutMainLoopEvent();
    Sleep(60000);
}

coordinates.txt:

1.1 1.03
2.5 2
3 5.3

我甚至不需要包括免费供过于求,我查看了一个以前运行良好的旧项目,现在它也崩溃了。使用代码::块与MinGW。为什么会发生这种情况?谢谢

display将被调用多次。每当需要重新绘制显示时,就会调用它,例如当窗口进入视图时,将另一个窗口移到其顶部,调整窗口大小等。

display读取文件。好吧,在它第一次读取文件后,文件将为。毕竟,您在全局变量中打开了该文件(仅供参考:never这样做),并一直读取,直到文件为空。

绘图时不要读取文件。将文件读取到数据结构中(例如vector<float>)。在渲染循环之前执行此操作。然后,使用数据结构进行绘制。