欢迎访问宙启技术站
智能推送

在QOpenGLWidget()中绘制多个OpenGL对象

发布时间:2024-01-02 10:06:14

在QOpenGLWidget()中绘制多个OpenGL对象,首先需要创建一个OpenGL的上下文,并且在绘制前要确保使用该上下文进行绘制操作。下面是一个简单的示例代码,演示了在QOpenGLWidget()中绘制多个OpenGL对象的过程。

首先,我们创建一个包含两个OpenGL对象的类,这两个对象分别是一个红色的正方形和一个绿色的圆形。代码如下:

class GLObject {
public:
    virtual void render() = 0;
};

class Square : public GLObject {
public:
    void render() override {
        // 设置绘制颜色为红色
        glColor3f(1.0f, 0.0f, 0.0f);
        // 绘制一个正方形
        glBegin(GL_QUADS);
        glVertex2f(-0.5f, -0.5f);
        glVertex2f(0.5f, -0.5f);
        glVertex2f(0.5f, 0.5f);
        glVertex2f(-0.5f, 0.5f);
        glEnd();
    }
};

class Circle : public GLObject {
public:
    void render() override {
        // 设置绘制颜色为绿色
        glColor3f(0.0f, 1.0f, 0.0f);
        // 绘制一个圆形
        glBegin(GL_TRIANGLE_FAN);
        for (int i = 0; i <= 360; i += 10) {
            float radian = i * M_PI / 180;
            float x = 0.5f * cos(radian);
            float y = 0.5f * sin(radian);
            glVertex2f(x, y);
        }
        glEnd();
    }
};

接下来,在QOpenGLWidget()的initializeGL()函数中创建两个对象的实例,并将它们添加到一个QList中:

void MyOpenGLWidget::initializeGL() {
    // 创建OpenGL的上下文

    // 创建两个对象的实例
    Square* square = new Square();
    Circle* circle = new Circle();

    // 将对象添加到列表中
    m_objects.append(square);
    m_objects.append(circle);
}

然后,在QOpenGLWidget()的paintGL()函数中使用绘制上下文进行绘制操作:

void MyOpenGLWidget::paintGL() {
    // 清除颜色缓冲区
    glClear(GL_COLOR_BUFFER_BIT);

    // 循环绘制所有对象
    for (GLObject* object : m_objects) {
        object->render();
    }
}

最后,在主程序中创建一个QOpenGLWidget的实例,并显示出来:

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    MyOpenGLWidget widget;
    widget.show();

    return app.exec();
}

以上示例代码演示了在QOpenGLWidget()中绘制多个OpenGL对象的过程。首先创建了两个OpenGL对象的类,然后在QOpenGLWidget()的initializeGL()函数中创建了这两个对象的实例,并将它们添加到一个列表中。在paintGL()函数中使用绘制上下文进行绘制操作,并循环绘制所有对象。最后,在主程序中创建并显示这个QOpenGLWidget的实例。这样就能在QOpenGLWidget()中绘制多个OpenGL对象了。