qt+opengl(一)

QtOpenGL系列

  1. qt opengl 绘制点、线、三角形、多边形(二)
  2. qt opengl 三维坐标系(三)

文章目录

  • QtOpenGL系列
  • 一、环境
  • 二、使用步骤
    • 1.引入库
    • 2. 创建OpenGLWidget


一、环境

Qt5.15 + MingGW 32-Bit

.pro

QT       += opengl

win32:LIBS += -lOpengl32 -lglu32
unix:LIBS += -lglut -lGLU

二、使用步骤

1.引入库

#include 
#include 
#include 
#include 

2. 创建OpenGLWidget

class MOpenGLWidget : public QOpenGLWidget, QOpenGLFunctions_4_5_Core
{
    Q_OBJECT
public:
    explicit MOpenGLWidget(QWidget *parent = nullptr);


protected:
	//重载几个opengl的重要函数
	//该函数在调用paintGL()和resizeGL()之前被调用一次,负责初始化绘制资源和状态值
	//该函数绘把上下文激活设置为当前,不需要单独调用makeCurrent()函数
    virtual void initializeGL();
    //窗口尺寸发生变化的时候被调用, 对绘制的图像进行调整
    virtual void resizeGL(int w, int h);
    //paintGL()类似QWidget的paintEvent()函数,负责对OpenGL图形进行绘制、更新或重绘
    virtual void paintGL();
 };
MOpenGLWidget::MOpenGLWidget(QWidget *parent)
    : QOpenGLWidget{parent}
{
    //设置多采样的值, 抗锯齿
    QSurfaceFormat fmt = format();
    fmt.setSamples(18);
    setFormat(fmt);
}

void MOpenGLWidget::initializeGL()
{
	// 这个函数仅会在构造类对象时调用一次,
    initializeOpenGLFunctions();
    //设置画布颜色
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
}

void MOpenGLWidget::resizeGL(int w, int h)
{
    glViewport(0, 0, w, h);
}
void MOpenGLWidget::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT);
    //启动绘制(点)
    glBegin(GL_POINTS);
    {
        // 颜色
        glColor3f(0.0f, 1.0f, 0.0f);
        //点的三维坐标
        glVertex3f(-1.0f, 0.0f, 0.0f);
        glVertex3f(-0.5f, 0.0f, 0.0f);
        glVertex3f(0.0f, 0.0f, 0.0f);
        glVertex3f(0.5f, 0.0f, 0.0f);
        glVertex3f(1.0f, 0.0f, 0.0f);
    }
    //结束绘制
    glEnd();
}

说明:在opengl中,坐标的数值在[-1, 1],且从上到下(y)、从左到右(z)、从高到低(z)的坐标值是从1到-1的


你可能感兴趣的:(opengl,qt)