qt添加本地图片作为opengl纹理,c++完整实例
时间: 2023-07-13 15:30:54 浏览: 97
以下是一个完整的C++示例代码,演示了如何将本地图片添加为OpenGL纹理并在OpenGL窗口中渲染:
```
#include <QtGui/QApplication>
#include <QtOpenGL/QGLWidget>
#include <GL/gl.h>
#include <GL/glu.h>
#include <QImage>
class GLWidget : public QGLWidget
{
public:
GLWidget(QWidget *parent = 0) : QGLWidget(parent) {}
protected:
void initializeGL()
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glEnable(GL_TEXTURE_2D);
QImage image("image.png");
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
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_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
}
void paintGL()
{
glClear(GL_COLOR_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, textureID);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f); glVertex2f(-1.0f, -1.0f);
glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, -1.0f);
glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f);
glTexCoord2f(0.0f, 1.0f); glVertex2f(-1.0f, 1.0f);
glEnd();
}
private:
GLuint textureID;
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
GLWidget w;
w.show();
return a.exec();
}
```
这个示例创建了一个继承自QGLWidget的OpenGL窗口,并在其中添加了本地图片作为OpenGL纹理。在paintGL函数中,使用glBindTexture将纹理对象绑定到OpenGL纹理单元上,并使用glTexCoord2f指定纹理坐标。在glBegin和glEnd之间,绘制一个矩形,并使用glVertex2f指定顶点坐标,完成了纹理的渲染。
阅读全文