QtOpenGL系列
qt opengl 绘制点、线、三角形、多边形(二)
文章目录
一、环境
Qt5.15 + MingGW 32-Bit
QT += opengl
win32:LIBS += -lOpengl32 -lglu32
unix:LIBS += -lglut -lGLU
二、使用步骤
1.引入库
#include <QOpenGLWidget>
#include <QOpenGLFunctions_4_5_Core>
#include <QGLWidget>
#include <GL/glu.h>
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();
}