OPenGL(一)

1. 在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;//对象指针,作为着色器程序
};

#endif // MYOPENGLWIDGET_H
MyOpenGLWidget.cpp
#include "myopenglwidget.h"
#include<QOpenGLShaderProgram>
#include <QGLFunctions>
MyOpenGLWidget::MyOpenGLWidget(QWidget *parent):QOpenGLWidget(parent)
{
    
}
void MyOpenGLWidget::initializeGL()
{
    //为当前初始化OPenGL函数
    initializeOpenGLFunctions();
    //创建顶点着色器
    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);//设置顶点着色器
    const char *fsrc="void main(){        \n"
                    "gl_FragColor=vec4(1.0,1.0,1.0,1.0);  \n"
                    "}                   \n";
    // 创建判断着色器
    QOpenGLShader *fshader=new QOpenGLShader(QOpenGLShader::Fragment,this);//顶点着色器


    fshader->compileSourceCode(fsrc);// 设置片段着色器
    //创建着色程序
    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);//清除颜色缓存和深度缓存
    GLfloat vectices[]={
        -0.8f,0.8f,
        -0.8f,-0.8f,
        0.8f,-0.8f,
        0.8f,0.8f
    };
    GLuint vPosition=program->attributeLocation("vPosition");//返回变量在着色程序参数列表中的位置
    glVertexAttribPointer(vPosition,2,GL_FLOAT,GL_FALSE,0,vectices);//将vPosition与顶点数组vectices关联
    glEnableVertexAttribArray(vPosition);//启动顶点数组
    glDrawArrays(GL_TRIANGLE_FAN,0,4);
}

3.main

#include<QApplication>
#include"myopenglwidget.h"
int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    MyOpenGLWidget w;
    w.resize(400,300);
    w.show();
    return app.exec();
}


 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NEHE的OPENGL教程 第42课 多视窗口… NEHE的OPENGL教程 第42课 多视窗口… NeHe的OPENGL中文教程:第41课 体… NeHe的OPENGL中文教程:第40课 绳… NeHe的OPENGL中文教程:第39课 物… NeHe的OPENGL中文教程:第39课 物… NeHe的OPENGL中文教程:第38课 从… NeHe的OPENGL中文教程:第37课 卡… 愚人节十大IT假新闻:Opera浏览器… NeHe的OPENGL中文教程:第36课 放… NeHe的OPENGL中文教程:第35课 AVI… NeHe的OPENGL中文教程:第35课 AVI… NeHe的OPENGL中文教程:第34课 从… NeHe的OPENGL中文教程:第33课 加… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第32课 Alp… NeHe的OPENGL中文教程:第31课 模… NEHE的OPENGL中文教程:第30课 碰… NEHE的OPENGL中文教程:第30课 碰… NeHe的OPENGL中文教程:第29课 Bli… NeHe的OPENGL中文教程:第28课 贝… NeHe的OPENGL中文教程:第27课 影… NeHe的OPENGL中文教程:第26课剪裁… NeHe的OPENGL中文教程:第25课 变… NeHe的OPENGL中文教程:第24课 TAG… NeHe的OPENGL中文教程:第23课 球… NeHe的OPENGL中文教程:第22课 凸… NeHe的OPENGL中文教程:第22课 凸… NeHe的OPENGL中文教程:第21课 反… NeHe的OPENGL中文教程:第21课 反… NeHe的OPENGL中文教程:第20课 蒙… NeHe的OPENGL中文教程:第19课 粒… NeHe的OPENGL中文教程:第18课 二… NeHe的OPENGL中文教程:第17课 2D… NeHe的OPENGL中文教程:第16课 雾 NeHe的OPENGL中文教程:第15课 图… NeHe的OPENGL中文教程:第14课 图… NeHe的OPENGL中文教程:第13课 位… NeHe的OPENGL中文教程:第12课 显… NeHe的OPENGL中文教程:第11课 飘… NeHe的OPENGL中文教程:第十课 漫… NeHe的OPENGL中文教程:第九课 漂… NeHe的OPENGL中文教程:第八课 Alp… NeHe的OPENGL中文教程:第七课 纹… NeHe的OPENGL中文教程:第七课 纹… NeHe的OPENGL中文教程:第六课 纹… NeHe的OPENGL中文教程:第五课 向3… NeHe的OPENGL中文教程:第四课 旋… NeHe的OPENGL中文教程:第三课 着… NeHe的OPENGL中文教程:第二课 多… NeHe的OPENGL中文教程:第一课 新… NeHe的OPENGL中文教程:第一课 新… DirectX与OpenGL方面的经典电子书… VC++ 6.0下OpengGL配置以及glut配… 怎样开始学习OpenGL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值