为什么我不能在Qt Widget上绘制三角形

时间:2016-05-04 08:37:15

标签: c++ qt opengl

好吧,这些天我试图在Qt 5.1.1上使用OpenGL库。我在mainwindow.ui中添加了一个Widget,然后将其提升为class,

这是班级的头文件,

include ':project-external-module'

project(':project-external-module').projectDir = file('/project/wrong/path')

这是类'cpp文件

#ifndef GLWIDGET_H
#define GLWIDGET_H

#include <QGLWidget>

#include <core.hpp>
#include <cv.hpp>

#include <GL/glut.h>

class GLWidget : public QGLWidget
{
    Q_OBJECT
public:
    explicit GLWidget(QWidget *parent = 0);

    void initializeGL();
    void paintGL();
    void resizeGL(int w, int h);

signals:

public slots:

private:

};

#endif // GLWIDGET_H

#include "glwidget.h" GLWidget::GLWidget(QWidget *parent) : QGLWidget(parent) { } void GLWidget::initializeGL() { glClearColor((GLclampf)0, (GLclampf)0, \ (GLclampf)1, (GLclampf)1); } void GLWidget::paintGL() { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0, 0); glBegin(GL_TRIANGLES); glVertex3f(-0.5, -0.5, 0); glVertex3f(0.5, -0.5, 0); glVertex3f(0.0, -0.5, 0); glEnd(); } void GLWidget::resizeGL(int w, int h) { } 中的代码似乎不起作用,我只能通过更改paintGL()中的代码来更改背景颜色;

项目的输出如下,

enter image description here

更新:对不起,我忘记了显示initializeGL()文件

.pro

1 个答案:

答案 0 :(得分:4)

您没有设置任何相机矩阵,因此您不知道虚拟相机的位置以及三角形是否可见。 您可以从正交相机开始:

void GLWidget::resizeGL(int width, int height)
{
    // ...
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glOrtho(-2, +2, -2, +2, -1.0, 1.0);

    // ...
}

此外,您正在尝试绘制退化三角形(所有y都相同)。试试:

glBegin(GL_TRIANGLES);
    glVertex3f(-0.5, -0.5, 0);
    glVertex3f(0.5, -0.5, 0);
    glVertex3f(0.0, 0.0, 0);
glEnd();