qmyopenglwidget.h
#ifndef QMYOPENGLWIDGET_H#define QMYOPENGLWIDGET_H#include
qmyopenglwidget.cpp
#include "qmyopenglwidget.h"QMyOpenglWidget::QMyOpenglWidget(QWidget* parent):QOpenGLWidget(parent){}void QMyOpenglWidget::initializeGL(){ initializeOpenGLFunctions(); glGenVertexArrays(1, &vao1); unsigned int vbo1; glGenBuffers(1, &vbo1); glBindVertexArray(vao1); glBindBuffer(GL_ARRAY_BUFFER, vbo1); float vertices[] = { -1.0, 0, 0, 1.0, 0, 0, 0, 1.0f, 0 }; //为当前绑定到target 的缓冲区对象创建一个新的数据存储 // glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); //告知显卡如何解析缓冲区里的属性值 glVertexAttribPointer(0, 3, GL_FLOAT, FALSE, 3*sizeof (GL_FLOAT), nullptr); //开启VAO管理的第一个属性 glEnableVertexAttribArray(0); cretaeShader();}void QMyOpenglWidget::resizeGL(int w, int h){}void QMyOpenglWidget::paintGL(){ glClearColor(0.2f, 0.2f, 0.1f, 0.1f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBindVertexArray(vao1); glDrawArrays(GL_TRIANGLES, 0, 3); update();}void QMyOpenglWidget::cretaeShader(){ program.addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shader/vertex.vert"); program.addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shader/frag.frag"); program.bind(); program.link();}
vertex.vert
#version 330 corein vec3 pos;out vec3 fcolors;void main(void){ gl_Position = vec4(pos, 1.0f);}
frag.frag
#version 330 coreout vec4 FragColor; //片段着色器输出void main(void){ FragColor = vec4(0.5, 0.8, 0.1, 1.0);}