qt opengl绘制三角形
时间: 2023-05-13 20:07:12 浏览: 277
可以使用以下代码来在 Qt 中使用 OpenGL 绘制三角形:
```cpp
#include <QtGui/QOpenGLFunctions>
#include <QtGui/QOpenGLShaderProgram>
#include <QtGui/QOpenGLVertexArrayObject>
#include <QtGui/QOpenGLBuffer>
class MyOpenGLWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
public:
MyOpenGLWidget(QWidget *parent = nullptr) : QOpenGLWidget(parent) {}
protected:
void initializeGL() override
{
initializeOpenGLFunctions();
// 创建着色器程序
m_program = new QOpenGLShaderProgram(this);
m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, R"(
#version 330 core
layout (location = 0) in vec3 aPos;
void main()
{
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
)");
m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, R"(
#version 330 core
out vec4 FragColor;
void main()
{
FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}
)");
m_program->link();
// 创建顶点数组对象和顶点缓冲对象
m_vao = new QOpenGLVertexArrayObject(this);
m_vao->create();
m_vao->bind();
m_vbo = new QOpenGLBuffer(QOpenGLBuffer::VertexBuffer);
m_vbo->create();
m_vbo->bind();
float vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
m_vbo->allocate(vertices, sizeof(vertices));
// 设置顶点属性指针
m_program->bind();
m_program->enableAttributeArray(0);
m_program->setAttributeBuffer(0, GL_FLOAT, 0, 3, 0);
// 解绑
m_vao->release();
m_vbo->release();
m_program->release();
}
void paintGL() override
{
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
m_program->bind();
m_vao->bind();
glDrawArrays(GL_TRIANGLES, 0, 3);
m_vao->release();
m_program->release();
}
private:
QOpenGLShaderProgram *m_program;
QOpenGLVertexArrayObject *m_vao;
QOpenGLBuffer *m_vbo;
};
```
这段代码使用 Qt 的 OpenGL 模块来创建一个继承自 QOpenGLWidget 的自定义 OpenGL 窗口,然后在 initializeGL() 函数中初始化着色器程序、顶点数组对象和顶点缓冲对象,最后在 paintGL() 函数中绘制三角形。
阅读全文