当前位置: 首页> 教育> 幼教 > b2b网站发布信息_室内装修设计软件免费_百度搜索引擎api_精准客源

b2b网站发布信息_室内装修设计软件免费_百度搜索引擎api_精准客源

时间:2025/7/11 20:00:03来源:https://blog.csdn.net/hgaohr1021/article/details/147600383 浏览次数:0次
b2b网站发布信息_室内装修设计软件免费_百度搜索引擎api_精准客源

请添加图片描述
mywidget.h

#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QOpenGLVertexArrayObject>
#include <QOpenGLShaderProgram>
#include <QOpenGLBuffer>class MyWidget : public QOpenGLWidget,protected QOpenGLFunctions
{Q_OBJECTpublic:MyWidget(QWidget* parent=0);~MyWidget();protected:void initializeGL() override;void paintGL() override;void resizeGL(int width, int height) override;private:QOpenGLShaderProgram* program;QOpenGLVertexArrayObject m_vao;QOpenGLBuffer m_vbo;int m_attr;int m_color;};

mywidget.cpp

#include "mywidget.h"#include <QDebug>static GLfloat vertices[] = {//我们所准备的需要提供给openGL的顶点数据// 位置              // 颜色0.5f, -0.5f, 0.0f,  1.0f, 0.0f, 0.0f,   // 右下-0.5f, -0.5f, 0.0f,  0.0f, 1.0f, 0.0f,   // 左下0.0f,  0.5f, 0.0f,  0.0f, 0.0f, 1.0f    // 顶部
};MyWidget::MyWidget(QWidget* parent):QOpenGLWidget(parent)
{}MyWidget::~MyWidget()
//建议在析构函数中手动销毁openGL相关的对象,
//文档中特意提到QT的回收机制难以保证回收所有openGL使用的资源
//不销毁的话在关闭程序时可能会出现异常
{makeCurrent();m_vao.destroy();m_vbo.destroy();doneCurrent();
}void MyWidget::initializeGL()
{initializeOpenGLFunctions();// 创建并绑定着色器程序program = new QOpenGLShaderProgram;program->bind();//向program中添加顶点着色器if(!program->addShaderFromSourceFile(QOpenGLShader::Vertex,":/triangle.vert")){qDebug()<< (program->log());return;}//向program中添加片段着色器if(!program->addShaderFromSourceFile(QOpenGLShader::Fragment,":/triangle.frag")){qDebug()<< (program->log());return;}if(!program->link()){qDebug()<< (program->log());return;}//创建并绑定VAOm_vao.create();m_vao.bind();//创建并绑定VBOm_vbo.create();m_vbo.bind();m_vbo.allocate(vertices, sizeof(vertices));//向VBO传递我们准备好的数据(本文件起始部分的静态数组)//向顶点着色器传递其中定义为"aPos"的变量所需的数据m_attr=program->attributeLocation("aPos");program->setAttributeBuffer(m_attr,GL_FLOAT, 0, 3,6*sizeof(GLfloat));program->enableAttributeArray(m_attr);//向顶点着色器传递其中定义为"aColor"的变量所需的数据m_color=program->attributeLocation("aColor");program->setAttributeBuffer(m_color,GL_FLOAT,3*sizeof(GLfloat),3,6*sizeof(GLfloat));program->enableAttributeArray(m_color);program->release();//解绑程序}void MyWidget::paintGL()
{//glClearColor(0.2f, 0.3f, 0.3f, 1.0f);//glClear(GL_COLOR_BUFFER_BIT);program->bind();//绑定绘制所要使用的openGL程序m_vao.bind();//绑定包含openGL程序所需信息的VAOglDrawArrays(GL_TRIANGLES, 0, 3);//绘制m_vao.release();//解绑VAOprogram->release();//解绑程序//update();//调用update()函数会执行paintGL,现在绘制一个静态的三角形可以不使用//也可以用定时器连接update()函数来控制帧率,直接在paintGL函数中调用update()大概是60帧
}void MyWidget::resizeGL(int width, int height)
{}

添加资源
点击工程—右键添加—选择QT—选择Qt Resource File–随便搞个名字:
添加资源文件:

triangle.vert

#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec3 aColor;out vec3 ourColor;void main()
{ourColor = aColor;gl_Position =vec4(aPos, 1.0);    
}

triangle.frag

#version 330 core
in vec3 ourColor;
void main()
{gl_FragColor = vec4(ourColor,1.0);
}

在mainwindow.ui中,添加QWidget,并提升为:MyWidget

关键字:b2b网站发布信息_室内装修设计软件免费_百度搜索引擎api_精准客源

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: