当前位置:网站首页>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);
}

边栏推荐
- Day18 - basis of interface testing
- High concurrency Architecture - read write separation
- Zhang Fei hardware 90 day learning notes - personal record of day 3, please see my personal profile / homepage for the complete
- This Chinese numpy quick look-up table is too easy!
- 第一章:三位阶乘和数,图形点扫描
- 235. 二叉搜索樹的最近公共祖先【lca模板 + 找路徑相同】
- QT -- qfileinfo file information reading
- Nous avons fait une plateforme intelligente de règlement de détail
- Record: pymysql is used in pycharm to connect to the database
- KINGS
猜你喜欢

What does a really excellent CTO look like in my eyes

If the warehouse management communication is not in place, what problems will occur?

2022.2.14 Li Kou - daily question - single element in an ordered array

Ego planner code parsing Bspline_ Optimizer section (3)

Basic principle of LSM tree

Simulation scheduling problem of SystemVerilog (1)

Record: writing MySQL commands

Using the visualization results, click to appear the corresponding sentence
![第二章:基于分解的求水仙花数,基于组合的求水仙花数, 兰德尔数,求[x,y]内的守形数,探求n位守形数,递推探索n位逐位整除数](/img/c5/0081689817700770f6210d50ec4e1f.png)
第二章:基于分解的求水仙花数,基于组合的求水仙花数, 兰德尔数,求[x,y]内的守形数,探求n位守形数,递推探索n位逐位整除数

QT -- qfile file read / write operation
随机推荐
Zhang Fei hardware 90 day learning notes - personal record on day 6. Please see my personal profile / homepage for the complete record
Web Security (VII) specific process of authentication with session cookie scheme
Summary of learning materials and notes of Zhang Fei's actual combat electronics 1-31
[leetcode] [SQL] notes
The more you talk, the more your stupidity will be exposed.
Latex image rotates with title
Basic principle of LSM tree
Read the paper glodyne global topology preserving dynamic network embedding
Help change the socket position of PCB part
[academic related] how to find the innovation of top papers? Chinese universities won the CVPR Best Student Thesis Award for the first time
[wallpaper] (commercially available) 70 wallpaper HD free
cipher
Record the errors reported when running fluent in the simulator
Le changement est un thème éternel
High concurrency Architecture - read write separation
Pytorch introduction to deep learning practice notes 13- advanced chapter of cyclic neural network - Classification
Redis master-slave synchronization, clustering, persistence
Sentinel source code analysis part II - sentinel dashboard console startup and configuration
P3402 persistent and searchable
Think of new ways