QT一个最简单的openGL例子

创建一个基类为widget的工程

把文件夹glut64放到代码目录下,文件夹包含以下文件

freeglut.dll

freeglut.lib

glut.h

freeglut.h

freeglut_ext.h

freeglut_std.h

在工程文件*.pro中增加以下几行

win32: LIBS += -L$$PWD/glut64/ -lfreeglut
INCLUDEPATH += $$PWD/glut64
DEPENDPATH += $$PWD/glut64

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>

class Widget : public QOpenGLWidget, protected QOpenGLFunctions
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

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

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "glut64\freeglut.h"

Widget::Widget(QWidget *parent)
    : QOpenGLWidget(parent)
{
}

Widget::~Widget()
{

}

void Widget::initializeGL()
{
    initializeOpenGLFunctions();
    glClearColor(0.0, 0.0, 0.0,1.0);
}

void Widget::resizeGL(int w, int h)
{
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-10,10,-10,10);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void Widget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLineWidth(5.0);
    glColor3d(0.0,1.0,1.0);

    glBegin(GL_LINE_LOOP);
    glVertex2d(-8.0, -8.0);
    glVertex2d(8.0, -8.0);
    glVertex2d(0.0, 8.0);
    glEnd();
}

 

posted on 2019-08-23 14:46  万里驰骋  阅读(1957)  评论(0编辑  收藏  举报

导航