OpenGL绘制圆

这篇博客详细介绍了如何利用OpenGL编程技术来绘制出精确的圆形,涵盖了必要的数学知识和OpenGL函数调用,适合对图形渲染感兴趣的读者。
#include "circle.h"
#include <QTimer>
#include <QDateTime>
#include <QImage>
#include <QtMath>

#define POINT_COUNT (362)

static float vertices[POINT_COUNT*3];

Circle::Circle(QWidget* parent)
{
    QTimer * timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(17);
    //center
    vertices[0] = 0;
    vertices[1] = 0;
    vertices[2] = 0;

    for(int i = 1; i <= POINT_COUNT - 1; i++) {
        int index = i*3;
        vertices[index] = sin(i * M_PI/ 180.0f);
        vertices[index+1] = cos(i * M_PI/ 180.0f);
        vertices[index+2] = 0;
    }
}

void Circle::initializeGL()
{
    bool enabled = initializeOpenGLFunctions();
    qDebug() << "initializeGL" << enabled;

    glGenVertexArrays(1, &mVAO);
    glGenBuffers(1, &mVBO);
    glBindVertexArray(mVAO);

    glBindBuffer(GL_ARRAY_BUFFER, mVBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, 0);

    mProgram.addShaderFromSourceFile(QOpenGLShader::Vertex, ":/shaders/circle.vsh");
    mProgram.addShaderFromSourceFile(QOpenGLShader::Fragment, ":/shaders/circle.fsh");
    bool success = mProgram.link();
    if(!success){
        qDebug() << "ERR: " << mProgram.log();
    }

}

void Circle::resizeGL(int w, int h)
{

}

void Circle::paintGL()
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    mProgram.bind();
    glBindVertexArray(mVAO);
    glDrawArrays(GL_TRIANGLE_FAN, 0, POINT_COUNT);
}

如此即可绘制出一个圆形。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后知后觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值