IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> QOpenGLShaderProgram 多EBO对象 函数 -> 正文阅读

[C++知识库]QOpenGLShaderProgram 多EBO对象 函数

#include "zlopenglwidget.h"

#include "qdebug.h"
#include "QOpenGLShader"

float vertices[] = {
    //右上三角形
    0.5f,0.5f,0.0f, //右上
    0.5f,-0.5f,0.0f,//右下
    -0.5f,-0.5f,0.0f,//左下
    -0.5f,0.5f,0.0f//左上
    }; //只有四个点了

unsigned int indicesRect[]=
{
    0,1,3, //右上三角形 右上 - 右下 - 左上
    1,2,3 //左下三角形  右下 - 左下-左上
};

unsigned int indicesTri[]=
{
    0,1,3 //右上三角形 右上 - 右下 - 左上

};

const char *vertexShaderSource =
   "#version 330 core \n"
   "layout(location=0) in vec3 aPos;\n"
   "void main()\n"
   "{\n"
   "gl_Position = vec4   (aPos.x,aPos.y,aPos.z,1.0f);\n"
   "}\n\0";


const char *fragmentShaderSource =
   "#version 330 core \n"
   "out vec4 FragColor;\n"
   "void main()\n"
   "{\n"
   "    FragColor = vec4 (1.0f,0.5f,0.2f,1.0f);\n"
   "}\n\0";




ZLOpenGLWidget::ZLOpenGLWidget(QWidget *parent)
    :QOpenGLWidget(parent)
{


}

ZLOpenGLWidget::~ZLOpenGLWidget()
{
    glDeleteVertexArrays(1,&VAO);
    glDeleteBuffers(1,&VBO);
    glDeleteBuffers(2,EBO);
    //glDeleteProgram();
}

void ZLOpenGLWidget::draw(int type)
{

    auto f_clear=[&]()
    {
        glClearColor(0.2f,0.2f,0.3f,1.0f);
        glClear(GL_COLOR_BUFFER_BIT);


    };

    auto f_Rect=[&]()
    {
        glClearColor(0.2f,0.2f,0.3f,1.0f);
        glClear(GL_COLOR_BUFFER_BIT);

        shaderProgram.bind();
        glBindVertexArray(VAO);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO[0]);

        glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,0);
    };

    auto f_Tri=[&]()
    {
        f_clear();

        shaderProgram.bind();
        glBindVertexArray(VAO);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO[1]);
        glDrawElements(GL_TRIANGLES,3,GL_UNSIGNED_INT,0);
    };


    makeCurrent();
    switch(type)
    {
    case eClear:
        f_clear();
        break;
    case eRect:
        f_Rect();
        break;
    case eTri:
        f_Tri();
        break;
    }
    doneCurrent();
    //update();

}



void ZLOpenGLWidget::initializeGL()
{
    initializeOpenGLFunctions();

    //产生Gen
    glGenVertexArrays(1,&VAO);
    glGenBuffers(1,&VBO);

    //绑定bind
    glBindVertexArray(VAO);
    glBindBuffer(GL_ARRAY_BUFFER,VBO);

    //设置
    glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);
    glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,3*sizeof(float),(void*)0);
    glEnableVertexAttribArray(0);
    //解绑
   glBindVertexArray(0);
   glBindBuffer(GL_ARRAY_BUFFER,0);


    //EBO

    glGenBuffers(2,EBO);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO[0]);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indicesRect),indicesRect,GL_STATIC_DRAW);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO[1]);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indicesTri),indicesTri,GL_STATIC_DRAW);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);

    QOpenGLShader* vertex = new QOpenGLShader(QOpenGLShader::Vertex);
    vertex->compileSourceCode(vertexShaderSource) ;

    QOpenGLShader* fragment = new QOpenGLShader(QOpenGLShader::Fragment);
    fragment->compileSourceCode(fragmentShaderSource) ;


    shaderProgram.addShader(vertex);
    shaderProgram.addShader(fragment);


    if(! shaderProgram.link())
    {
        qDebug()<<"Error"<<shaderProgram.log();
    }



}

void ZLOpenGLWidget::resizeGL(int w, int h)
{
    Q_UNUSED(w);
    Q_UNUSED(h);


  //  glDeleteProgram(shaderProgram);

}

void ZLOpenGLWidget::paintGL()
{
//    glClearColor(0.2f,0.2f,0.3f,1.0f);
//    glClear(GL_COLOR_BUFFER_BIT);

//    shaderProgram.bind();
//    glBindVertexArray(VAO);
//    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,EBO[0]);

//    glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,0);
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-01 20:25:11  更:2022-02-01 20:27:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:11:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码