1. Add in pro
QT += opengl
2.MyOpenGLWidget
MyOpenGLWidget.h
#ifndef MYOPENGLWIDGET_H #define MYOPENGLWIDGET_H #include <QOpenGLWidget> #include <QOpenGLFunctions> class QOpenGLShaderProgram; class MyOpenGLWidget:public QOpenGLWidget,protected QOpenGLFunctions { public: explicit MyOpenGLWidget(QWidget *parent=0); protected: void initializeGL(); void paintGL(); void resizeGL(int width,int height); private: QOpenGLShaderProgram *program;//Object pointer, as a shader program }; #endif // MYOPENGLWIDGET_HMyOpenGLWidget.cpp
#include "myopenglwidget.h" #include<QOpenGLShaderProgram> #include <QGLFunctions> MyOpenGLWidget::MyOpenGLWidget(QWidget *parent):QOpenGLWidget(parent) { } void MyOpenGLWidget::initializeGL() { //Initialize the OpenGL function for the current initializeOpenGLFunctions(); //create vertex shader QOpenGLShader *vshader=new QOpenGLShader(QOpenGLShader::Vertex,this);//顶点着色器 const char *vsrc="in vec4 vPosition ; \n" "void main(){ \n" "gl_Position =vPosition ; \n" "} \n"; vshader->compileSourceCode(vsrc);//Set vertex shader const char *fsrc="void main(){ \n" "gl_FragColor=vec4(1.0,1.0,1.0,1.0); \n" "} \n"; // create a judgment shader QOpenGLShader *fshader=new QOpenGLShader(QOpenGLShader::Fragment,this);//Vertex shader fshader->compileSourceCode(fsrc);// Set fragment shader //create shader program program=new QOpenGLShaderProgram; program->addShader(vshader); program->addShader(fshader); program->link(); program->bind(); } void MyOpenGLWidget::resizeGL(int ,int) { } void MyOpenGLWidget::paintGL() { int w=width(); int h=height(); int side=qMin(w,h); glViewport((w-side)/2,(h-side)/2,side,side); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//Clear the color buffer and depth buffer GLfloat vectices [] = { -0.8f,0.8f, -0.8f,-0.8f, 0.8f,-0.8f, 0.8f,0.8f }; GLuint vPosition=program->attributeLocation("vPosition");//Returns the location of the variable in the shader program parameter list glVertexAttribPointer(vPosition,2,GL_FLOAT,GL_FALSE,0,vectices);//Associate vPosition with vertex array vectices glEnableVertexAttribArray(vPosition);//Start the vertex array glDrawArrays(GL_TRIANGLE_FAN,0,4); }
3.main
#include<QApplication> #include"myopenglwidget.h" int main(int argc, char *argv[]) { QApplication app(argc,argv); MyOpenGLWidget in; w.resize(400,300); w.show(); return app.exec(); }