您的位置:首页 > 健康 > 养生 > 杭州开发小程序公司_长春 网络公司_百度客服人工电话_推广方案经典范文

杭州开发小程序公司_长春 网络公司_百度客服人工电话_推广方案经典范文

2025/4/21 14:38:35 来源:https://blog.csdn.net/suntingsheng123/article/details/147104768  浏览:    关键词:杭州开发小程序公司_长春 网络公司_百度客服人工电话_推广方案经典范文
杭州开发小程序公司_长春 网络公司_百度客服人工电话_推广方案经典范文

使用qt中的openglWidget绘制一个三角形。自定义的类继承关系sunOpengl : public QOpenGLWidget,QOpenGLFunctions_3_3_Core

代码如下

/*----MainWindow.cpp----------------------------------------------*/
#include "mainwindow.h"
#include "./ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//setCentralWidget(ui->openGLWidget);openGLWidget=new sunOpengl(parent);setCentralWidget(openGLWidget);
}MainWindow::~MainWindow()
{delete ui;
}/*----MainWindow.h----------------------------------------------*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include"sunopengl.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;sunOpengl*openGLWidget;
};
#endif // MAINWINDOW_H

/*-----------------sunopengl.cpp-----------------------*/
#include "sunopengl.h"sunOpengl::sunOpengl(QWidget *parent) {}
unsigned int shaderProgram;
unsigned int VBO,VAO;
float vertices[]={-0.5f,-0.5f,0.0f,0.5f,-0.5f,0.0f,0.0f,0.5f,0.0f,
};const char *vertexShaderSource="#version 330 core\n""layout(location=0) in vec3 aPos;\n""void main()\n""{\n""gl_Position=vec4(aPos.x,aPos.y,aPos.z,1.0);\n""}\0";
const char* fragmentShaderSource="#version 330 core\n""out vec4 FragColor;\n""void main()\n""{\n""FragColor=vec4(1.0f,0.5f,0.2f,1.0f);\n""}\n\0";
void sunOpengl::initializeGL()
{this->initializeOpenGLFunctions();glGenVertexArrays(1,&VAO);glGenBuffers(1,&VBO);glBindVertexArray(VAO);glBindBuffer(GL_ARRAY_BUFFER,VBO);//将数据传入显存glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);//显卡解析参数glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,3*sizeof(float),(GLvoid*)0);//开始VOA属性glEnableVertexAttribArray(0);glBindVertexArray(0);glBindBuffer(GL_ARRAY_BUFFER,0);//编译顶点着色器unsigned int vertexShader=glCreateShader(GL_VERTEX_SHADER);glShaderSource(vertexShader,1,&vertexShaderSource,NULL);glCompileShader(vertexShader);//编译片段着色器unsigned int fragmentShader=glCreateShader(GL_FRAGMENT_SHADER);glShaderSource(fragmentShader,1,&fragmentShaderSource,NULL);glCompileShader(fragmentShader);//link shadeshaderProgram=glCreateProgram();glAttachShader(shaderProgram,vertexShader);glAttachShader(shaderProgram,fragmentShader);glLinkProgram(shaderProgram);glUseProgram(shaderProgram);
}void sunOpengl::resizeGL(int w, int h)
{}void sunOpengl::paintGL()
{glUseProgram(shaderProgram);glClearColor(0.2f,0.3f,0.3f,1.0f);glClear(GL_COLOR_BUFFER_BIT);glBindVertexArray(VAO);glDrawArrays(GL_TRIANGLES,0,3);glBindVertexArray(0);}
//定点着色器-》几何着色-》图元装配-》光栅化-》片段着色器-》测试与混合/*-----------------sunopengl.h-----------------------*/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include"sunopengl.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private:Ui::MainWindow *ui;sunOpengl*openGLWidget;
};
#endif // MAINWINDOW_H

运行效果

 

 

版权声明:

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

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