【问题标题】:Qt OpenGL Widget Not Showing Triangles Until ResizedQt OpenGL小部件在调整大小之前不显示三角形
【发布时间】:2014-04-02 14:42:47
【问题描述】:

我是 OpenGL 编程新手,对 Qt 还很陌生。按照教程,我使用以下代码在我的 OpenGL Widget 中创建了两个三角形:

主窗口.cpp

void MainWindow::initializeGL() {
    qDebug("initializing");

    GLfloat verticies[] = {
        +0.0f, +0.0f,
        +1.0f, +1.0f,
        -1.0f, +1.0f,
        -1.0f, -1.0f,
        +1.0f, -1.0f
    };

    GLuint vertexBufferID;
    glGenBuffers(1, &vertexBufferID);
    glBindBuffer(GL_ARRAY_BUFFER, vertexBufferID);
    glBufferData(GL_ARRAY_BUFFER, sizeof(verticies), verticies, GL_STATIC_DRAW);
    glEnableVertexAttribArray(0);
    glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0);

    GLushort indices[] = {
        0, 1, 2,
        0, 3, 4
    };

    GLuint indexBufferID;
    glGenBuffers(1, &indexBufferID);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBufferID);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);

    glClearColor(0, 0, 0, 1);
}

void MainWindow::paintGL() {
    qDebug("painting");

    //glViewport(0, 0, width(), height());
    glClear(GL_COLOR_BUFFER_BIT);

    //glDrawArrays(GL_TRIANGLES, 0, 6);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);
}

奇怪的是,这段代码运行良好,但只有在我调整窗口大小时才会显示:

调整大小之前:

调整大小后:

initializing 和 painting 在调整大小之前都输出到控制台,因此它们被调用。

调整大小会导致三角形显示什么?

如果有什么不同,我正在使用 Mac OSX (Mavericks)。

【问题讨论】:

    标签: qt opengl


    【解决方案1】:

    默认情况下,自动交换应该是打开的,它应该负责在 PaintGL 之后更新屏幕。可以肯定的是,您可以在离开 PaintGL 之前拨打swapBuffers() 电话吗?

    【讨论】:

    • 我在paintGL 的末尾添加了swapBuffers(); 行。同样的行为。
    【解决方案2】:

    使用它可能有用

    glViewPort(0, 0, width(), height()); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多