opengl png图片 qt_QT开发OpenGL无法显示图像[已解决]

#ifndef GLWIDGET_H

#define GLWIDGET_H

#include

#include

#include

#include

#include

#include

class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions

{

public:

GLWidget(QWidget *parent=0);

~GLWidget();

protected:

virtual void initializeGL() Q_DECL_OVERRIDE;

virtual void paintGL() Q_DECL_OVERRIDE;

virtual void resizeGL(int w, int h) Q_DECL_OVERRIDE;

GLuint compileShaders();

private:

QOpenGLShaderProgram *program;

QOpenGLVertexArrayObject vao;

QOpenGLBuffer vbo;

static const char *vshader_source;

static const char *fshader_source;

};

#endif // GLWIDGET_H

#include "glwidget.h"

#include

#include

#include

GLWidget::GLWidget(QWidget *parent) :

QOp

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Qt中使用OpenGL显示QImage,您需要使用QOpenGLWidget类。这是一个Qt小部件,它为OpenGL提供了一个渲染上下文,可以在其中绘制图形。下面是一个简单的示例代码,展示了如何使用QOpenGLWidget类显示QImage: ```cpp #include <QtWidgets/QApplication> #include <QtWidgets/QOpenGLWidget> #include <QtGui/QOpenGLShaderProgram> #include <QtGui/QOpenGLFunctions> #include <QtGui/QImage> #include <QtGui/QPainter> class SimpleOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions { public: SimpleOpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {} protected: void initializeGL() override { initializeOpenGLFunctions(); glClearColor(1.0f, 1.0f, 1.0f, 1.0f); } void resizeGL(int w, int h) override { glViewport(0, 0, w, h); } void paintGL() override { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Load image QImage image("path/to/image.png"); // Convert image to OpenGL texture GLuint texture; glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.width(), image.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, image.bits()); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // Draw texture QOpenGLShaderProgram program; program.addShaderFromSourceCode(QOpenGLShader::Vertex, "attribute vec2 position; varying vec2 texCoord; void main() { gl_Position = vec4(position, 0.0, 1.0); texCoord = position * 0.5 + 0.5; }"); program.addShaderFromSourceCode(QOpenGLShader::Fragment, "uniform sampler2D texture; varying vec2 texCoord; void main() { gl_FragColor = texture2D(texture, texCoord); }"); program.link(); program.bind(); program.setUniformValue("texture", 0); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, nullptr); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisableVertexAttribArray(0); // Delete texture glDeleteTextures(1, &texture); } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); SimpleOpenGLWidget w; w.show(); return a.exec(); } ``` 在上面的代码中,我们首先在initializeGL()函数中初始化OpenGL,并在resizeGL()函数中设置视口。在paintGL()函数中,我们首先将QImage转换为OpenGL纹理,然后使用着色器程序绘制纹理。 请注意,这只是一个简单的示例代码,实际的应用程序可能需要更复杂的着色器程序和纹理绑定代码,以适应不同的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值