QTOpenGL绘制三角形
1 QT的UI上,控件拉一个QOpenGLWidget ,点击右键,升级为类,输入类名
2
#include <QObject> #include <QDebug> #include <QWidget> #include <QPainter> #include <QOpenGLWidget> #include <QOpenGLBuffer> #include <QOpenGLFunctions> #include <QOpenGLShaderProgram> class QOpenGLP:public QOpenGLWidget,protected QOpenGLFunctions { Q_OBJECT public: explicit QOpenGLP(QWidget *parent = nullptr); protected: void paintGL() ; //渲染OpenGL场景,每当需要更新小部件时调用 void initializeGL() ;//设置OpenGL资源和状态 void resizeGL(int w, int h);//设置OpenGL视口,投影等 private: QOpenGLShaderProgram *program; }; #endif // QOPENGLPLAY_H
#include "qopengl***.h" GLint VPID = -1; QOpenGLP::QOpenGLP(QWidget *parent):QOpenGLWidget(parent) { } void QOpenGLP::initializeGL() { initializeOpenGLFunctions(); QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this); const char *vsrc = "attribute vec4 vPosition; \n" "void main() { \n" " gl_Position = vPosition; \n" "} \n"; vshader->compileSourceCode(vsrc); QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this); const char *fsrc = "void main() { \n" " gl_FragColor = vec4(0.0, 1.0, 1.0, 1.0);\n" "} \n"; fshader->compileSourceCode(fsrc); m_program = new QOpenGLShaderProgram(this); m_program->addShader(vshader); m_program->addShader(fshader); m_program->link(); VPID = m_program->attributeLocation("vPosition"); delete vshader; delete fshader; } void QOpenGLP::resizeGL(int w, int h) { } void QOpenGLP::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); m_program->bind(); // 顶点位置 GLfloat vertices[] = { 0.0f, 1.0f, -0.5f, -0.5f, 0.5f, -0.5f }; glVertexAttribPointer(VPID, 2, GL_FLOAT, GL_FALSE, 0, vertices); glEnableVertexAttribArray(VPID); glDrawArrays(GL_TRIANGLES, 0, 3); glDisableVertexAttribArray(VPID); m_program->release(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】