c++ - QT 和 OpenGL 的奇怪行为

标签 c++ qt opengl

当尝试使用 QT 在 OpenGL 小部件上绘制时,窗口显示最终变得相当扭曲。 所要做的只是清空屏幕。

Screenshot

#include "glwidget.h"

// Mainwidget is a sub-class of GLWidget

GLWidget::GLWidget(QWidget *parent) :
    QGLWidget(parent)
{
}

void GLWidget::resizeGL(int width,int height)
{
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, width, height, 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}

GLWidget::~GLWidget()
{
    ;
}

#include <QtGui>
#include "mainwidget.h"

MainWidget::MainWidget()
{
    //this->showFullScreen();
    derp = 100;
}

void MainWidget::paintGL()
{
    glClearColor(0, 0, 0, 0);
    //drawTriangle(0, 0, 100, 100, derp, 0);
    derp = rand()%500;
}

void MainWidget::initializeGL()
{
    this->resizeGL(800, 600);
}

void MainWidget::drawTriangle(int x1,int y1, int x2, int y2, int x3, int y3)
{
    glBegin(GL_TRIANGLES);
    glVertex3f(x1, y1, 0.0f);
    glVertex3f(x2, y2, 0.0f);
    glVertex3f(x3, y3, 0.0f);
glEnd();
}

#include <QtGui>
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QWidget(parent)
{
    QGridLayout *layout = new QGridLayout;
    QTimer *timer = new QTimer(this);
    MainWidget *View = new MainWidget();
    layout->addWidget(View, 0, 0);
    setLayout(layout);
    connect(timer, SIGNAL(timeout()), View, SLOT(paintGL()));
    timer->start(50);
}

最佳答案

尝试 clearing the color buffer偶尔。备注glClearColor()只是锁存一些状态,实际上并不清除任何缓冲区。

关于c++ - QT 和 OpenGL 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569423/

相关文章:

c++ - 我的代码在 Qt 中的 Debug模式下工作时不能在 Release模式下工作

c++ - float 变量如何存储不在其范围内的负值?

Java OpenGL 画一颗星星

c++ - 可移植浮点变量模板

c++ - 使用 reinterpret_cast 的签名别名

python - 如何使用 PySide 快速调整 PNG 大小?

c++ - Qt Progressbar 增加超过它应该的

c++ - 对 FILE 的操作改为对 QByteArray 的操作?

iphone - 将点数组转换为三角形带的快速方法?

c++ - 将一个 int 传递给一个函数,然后使用该 int 创建一个数组