`
头文件
#ifndef OPENWIDGET_H
#define OPENWIDGET_H
#include <QWidget>
#include"qopenglwidget.h"
#include<qopenglfunctions.h>
#include<qopenglshaderprogram.h>
#include<QOpenGLBuffer>
class QOpenGLShaderProgram;
class QOpenGLTexture;
class OpenWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
Q_OBJECT
public:
explicit OpenWidget(QWidget *parent = nullptr);
//signals:
//public slots:
public:
void initializeGL();
void resizeGL(int w, int h);
void paintGL();
void keyPressEvent(QKeyEvent*event);
private:
QOpenGLShaderProgram *program;
QOpenGLBuffer vbo;
QOpenGLTexture* texture[2];
GLfloat translate,xRot,yRot,zRot;
};
#endif // OPENWIDGET_H`
cpp
#include "openwidget.h"
#include<qopenglshaderprogram.h>
#include<QOpenGLTexture>
#include<qimage.h>
#include<QKeyEvent>
OpenWidget::OpenWidget(QWidget *parent) : QOpenGLWidget(parent)
{
translate=-6.0;
xRot=zRot=0.0;
yRot=-30.0;
}
void OpenWidget::initializeGL()
{
initializeOpenGLFunctions();
glEnable(GL_DEPTH_TEST);
texture[0]=new QOpenGLTexture(QImage(QString(":/myopengl/side%1.bmp")));
texture[1]=new QOpenGLTexture(QImage(QString(":/myopengl/side%2.bmp")));
QOpenGLShader *vshader=new QOpenGLShader(QOpenGLShader::Vertex,this);
const char *vsrc=
"#version 150 \n"
"in vec4 vPosition; \n"
"in vec4 vTexCoord; \n"
"out vec4 texCoord; \n"
"uniform mat4 matrix; \n"
"void main(){ \n"
"texCoord=vTexCoord; \n"
"gl_Position=matrix*vPosition; \n"
"} \n";
if (!vshader->compileSourceCode<

本文介绍如何使用OpenGL在Qt环境中创建3D渲染应用,包括设置OpenGL上下文、加载纹理、编译着色器、设置顶点缓冲区、绘制几何形状以及响应键盘输入进行视图控制。
最低0.47元/天 解锁文章
5742

被折叠的 条评论
为什么被折叠?



