#include "WOpenGLWidget.h"
#include <QPainter>
#include <QOpenGLPaintDevice>
#include <qglobal.h>
#include <qmath.h>
static float vertices[] = {
// ---- 位置 ---- - 纹理坐标 -
1.0f, 1.0f, 0.0f, 1.0f, 1.0f, // 右上
1.0f, -1.0f, 0.0f, 1.0f, 0.0f, // 右下
-1.0f, -1.0f, 0.0f, 0.0f, 0.0f, // 左下
-1.0f, 1.0f, 0.0f, 0.0f, 1.0f // 左上
};
static int indices[] = {
0, 1, 3,
1, 2, 3
};
WOpenGLWidget::WOpenGLWidget(QWidget* parent)
: QOpenGLWidget(parent)
{
QSurfaceFormat format;
format.setDepthBufferSize(24);
format.setVersion(3,3);
format.setProfile(QSurfaceFormat::CoreProfile);
setFormat(format);
}
void WOpenGLWidget::setSplit(SplitType type)
{
makeCurrent();
m_program->bind();
m_program->setUniformValue("split",type); //范围[0,2]
doneCurrent();
update();
}
void WOpenGLWidget::initializeGL()
{
initializeOpenGLFunctions();
m_program = new QOpenGLShaderProgram();
m_program->addShaderFromSourceFile(QOpenGLShader::Vertex,":/shapesChange.vert");
m_program->addShaderFromSourceFile(QOpenGLShader::Fragment,":/shapesChange.frag");
m_program->link();
//==========带纹理的图片使用的VAO VBO================
glGenVertexArrays(1, &m_VAO);
glGenBuffers(1, &m_VBO);
glBindVertexArray(m_VAO);//绑定VAO
glBindBuffer(GL_ARRAY_BUFFER, m_VBO);//顶点缓冲对象的缓冲类型是GL_ARRAY_BUFFER
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);//把顶点数据复制到缓冲的内存中GL_STATIC_DRAW :数据不会或几乎不会改变。
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &m_EBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
glBindVertexArray(0);//解绑VAO
//==========带纹理的图片使用的VAO VBO================
m_glTexture = new QOpenGLTexture(QImage("./demo.jpeg").mirrored());
m_program->bind();
m_program->setUniformValue("ourTexture",0);
QMatrix4x4 model;
model.setToIdentity();
m_program->setUniformValue("model", model);
}
void WOpenGLWidget::paintGL()
{
glClearColor(1.0f,1.0f,1.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_DITHER);
m_program->bind();
m_glTexture->bind(0);
glBindVertexArray(m_VAO);//绑定VAO
glDrawElements(GL_TRIANGLES,6,GL_UNSIGNED_INT,0);
glBindTexture(GL_TEXTURE_2D,0);
glBindVertexArray(0);
}
void WOpenGLWidget::resizeGL(int w, int h)
{
}
没有合适的资源?快使用搜索试试~ 我知道了~
Qt+opengl实现分屏效果
共11个文件
cpp:3个
h:2个
vert:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 125 浏览量
2024-03-05
10:24:45
上传
评论 1
收藏 71KB ZIP 举报
温馨提示
Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+opengl实现分屏效果Qt+op
资源推荐
资源详情
资源评论
收起资源包目录
Split.zip (11个子文件)
Split
widget.ui 2KB
widget.cpp 633B
WOpenGLWidget.cpp 3KB
shapesChange.vert 280B
WOpenGLWidget.h 971B
shapesChange.frag 2KB
main.cpp 175B
demo.jpeg 67KB
Split.pro 1KB
res.qrc 141B
widget.h 470B
共 11 条
- 1
资源评论
灬Sunnnnn
- 粉丝: 3w+
- 资源: 98
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功