当前位置:网站首页>03 -- QT OpenGL EBO draw triangle
03 -- QT OpenGL EBO draw triangle
2022-07-03 19:19:00 【Qingsong 0527】
qmyopenglwidget.h
#ifndef QMYOPENGLWIDGET_H
#define QMYOPENGLWIDGET_H
#include <QWidget>
#include <QOpenGLWidget>
#include <QOpenGLFunctions_3_3_Core>
#include <QOpenGLShaderProgram>
class QMyOpenglWidget : public QOpenGLWidget, QOpenGLFunctions_3_3_Core
{
Q_OBJECT
public:
explicit QMyOpenglWidget(QWidget* parent = nullptr);
protected:
virtual void initializeGL();
virtual void resizeGL(int w, int h);
virtual void paintGL();
public:
void cretaeShader();
void initTrianggleData();
private:
unsigned int vao1;
unsigned int ebo1;
QOpenGLShaderProgram program;
signals:
public slots:
};
#endif // QMYOPENGLWIDGET_H
qmyopenglwidget.cpp
#include "qmyopenglwidget.h"
QMyOpenglWidget::QMyOpenglWidget(QWidget* parent):QOpenGLWidget(parent)
{
}
void QMyOpenglWidget::initializeGL()
{
initializeOpenGLFunctions();
cretaeShader();
initTrianggleData();
}
void QMyOpenglWidget::initTrianggleData()
{
glGenVertexArrays(1, &vao1);
glBindVertexArray(vao1);
float vertices[] = {
-1.0, 0, 0,
1.0, 0, 0,
0, 1.0f, 0
};
unsigned int vbo1;
glGenBuffers(1, &vbo1);
glBindBuffer(GL_ARRAY_BUFFER, vbo1);
// Is currently bound to target Create a new data store for the buffer object //
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// Tell the graphics card how to parse the attribute value in the buffer
glVertexAttribPointer(0, 3, GL_FLOAT, FALSE, 3*sizeof (GL_FLOAT), nullptr);
// Turn on VAO The first attribute of Management
glEnableVertexAttribArray(0);
float colors[] = {
1.0, 0, 0,
0.0, 1.0, 0,
0, 0.0f, 1.0
};
unsigned int vbo2;
glGenBuffers(1, &vbo2);
glBindBuffer(GL_ARRAY_BUFFER, vbo2);
// Is currently bound to target Create a new data store for the buffer object //
glBufferData(GL_ARRAY_BUFFER, sizeof(colors), colors, GL_STATIC_DRAW);
// Tell the graphics card how to parse the attribute value in the buffer
glVertexAttribPointer(1, 3, GL_FLOAT, FALSE, 3*sizeof (GL_FLOAT), nullptr);
// Turn on VAO The first attribute of Management
glEnableVertexAttribArray(1);
unsigned int indexs[] = {
0, 1, 2
};
glGenBuffers(1, &ebo1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo1);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexs), indexs, GL_STATIC_DRAW);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
void QMyOpenglWidget::resizeGL(int w, int h)
{
}
void QMyOpenglWidget::paintGL()
{
glClearColor(0.2f, 0.2f, 0.1f, 0.1f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo1);
glBindVertexArray(vao1);
//glDrawArrays(GL_TRIANGLES, 0, 3);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, nullptr);
update();
}
void QMyOpenglWidget::cretaeShader()
{
program.addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shader/vertex.vert");
program.addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shader/frag.frag");
program.bind();
program.link();
}
vertex.vert
#version 330 core
in vec3 pos;
in vec3 colors;
out vec3 fcolors;
void main(void)
{
fcolors = colors;
gl_Position = vec4(pos, 1.0f);
}
frag.frag
#version 330 core
out vec4 FragColor; // Clip shader output
in vec3 fcolors;
void main(void)
{
//FragColor = vec4(0.5, 0.8, 0.1, 1.0);
FragColor = vec4(fcolors, 1.0f);
}

边栏推荐
- Web Security (VII) specific process of authentication with session cookie scheme
- Scrapy爬虫框架
- 东数西算拉动千亿产业,敢啃“硬骨头”的存储厂商才更有机会
- These problems should be paid attention to in the production of enterprise promotional videos
- EGO Planner代码解析bspline_optimizer部分(3)
- Understanding of database architecture
- The way to treat feelings
- How does if ($variable) work? [repeat] - how exactly does if ($variable) work? [duplicate]
- 记录在模拟器中运行flutter时报的错
- math_泰勒公式
猜你喜欢

01. Preparation for automated office (free guidance, only three steps)

We have built an intelligent retail settlement platform

Think of new ways

我們做了一個智能零售結算平臺

Ego planner code parsing Bspline_ Optimizer section (2)

Yolov3 network model building

BUUCTF

【光学】基于matlab涡旋光产生【含Matlab源码 1927期】

Help change the socket position of PCB part

What is the content of game modeling
随机推荐
【水质预测】基于matlab模糊神经网络水质预测【含Matlab源码 1923期】
Summary of composition materials for 2020 high-frequency examination center of educational resources
Comments on flowable source code (37) asynchronous job processor
Ego planner code parsing Bspline_ Optimizer section (1)
Zhang Fei hardware 90 day learning notes - personal record on day 5. Please see my personal profile / homepage for the complete record
Basic principle of LSM tree
Valentine's Day - make an exclusive digital collection for your lover
Help change the socket position of PCB part
Max of PHP FPM_ Some misunderstandings of children
TFs and SVN [closed] - TFs vs SVN [closed]
Web Security (VII) specific process of authentication with session cookie scheme
SSM整合-前后台协议联调(列表功能、添加功能、添加功能状态处理、修改功能、删除功能)
2020 intermediate financial management (escort class)
利用可视化结果,点击出现对应的句子
[mathematical modeling] ship three degree of freedom MMG model based on MATLAB [including Matlab source code 1925]
HOW TO WRITE A DAILY LAB NOTE?
Work Measurement - 1
Next spread
Webrtc[41] - Analysis of the establishment process of webrtc transmission channel
Free sharing | linefriends hand account inner page | horizontal grid | not for sale