【问题标题】:using glutBitmapCharacter() to draw text closing opengl program使用 glutBitmapCharacter() 绘制文本关闭 opengl 程序
【发布时间】:2019-10-31 11:25:26
【问题描述】:

当我尝试使用名为drawText() 的函数绘制文本时,该函数运行平稳,但当它到达glutBitmapCharacter(GLUT_BITMAP_9_BY_15, (int)text[i]); 时,程序意外关闭。我已经测试过它是函数的这个特定部分导致了这个问题,就好像我在哪里删除它并用printf("Hello World!\n"); 替换它一样,程序不会崩溃。

主要功能:

int main(void) {
    GLFWwindow* window;
    int width = 840, height = 640;
    if (!glfwInit()) {
        printf("failed to init glfw");
        return -1;
    }

    window = glfwCreateWindow(width, height, "ElectroCraft", NULL, NULL);
    glfwMakeContextCurrent(window);
    if (!window) {
        printf("failed to start window");
        glfwTerminate();
        return -1;
    }
    glEnable(GL_DEPTH_TEST);
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, width, 0, height, 0, 1000);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    while (!glfwWindowShouldClose(window)) {
        glClearColor(53.0f / 255.0f, 81.0f / 255.0f, 92.0f / 255.0f, 0.0f);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glBegin(GL_LINES);
        glVertex2f(0, height-80);
        glVertex2f(width, height - 80);
        glEnd();

        string text;
        text = "Hello World!";
        //glutBitmapCharacter(GLUT_BITMAP_9_BY_15, int(text[1]));
        drawText(text.data(), text.size(), 50, 100);

        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwTerminate();
    return 1;
}

drawText函数:

void drawText(const char* text, int length, int x, int y) {
    glMatrixMode(GL_PROJECTION);
    double* matrix = new double[16];
    glGetDoublev(GL_PROJECTION_MATRIX, matrix);
    glLoadIdentity();
    glOrtho(0, 800, 0, 600, -5, 5);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glPushMatrix();
    glLoadIdentity();
    glRasterPos2i(x, y);
    for (int i=0; i < length; i++) {
        glutBitmapCharacter(GLUT_BITMAP_9_BY_15, (int)text[i]);
        printf("Hello world!\n");
    }
    glPopMatrix();
    glMatrixMode(GL_PROJECTION);
    glLoadMatrixd(matrix);
    glMatrixMode(GL_MODELVIEW);
}

我不确定是我的代码不是最好的还是 freeglut 库中存在错误。需要明确的是,我正在使用 freeglut。

【问题讨论】:

  • 你不能使用glutBitmapCharacter而不调用glutInit()
  • “为了清楚,我使用的是 freeglut。”...那你为什么使用 GLFW 函数?

标签: c++ opengl glut glfw opengl-compat


【解决方案1】:

如果你想使用GLUT库的任何函数,那么GLUT必须由glutInit初始化。例如:

int main(int argc, char** argv)
{
    glutInit(&argc, argv);

    // [...]
}

【讨论】:

  • 什么是 &argc, argv 我为这些论点放了什么
  • 这是应用程序的命令行参数。见Main function。您可以复制/粘贴答案的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
相关资源
最近更新 更多