在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对象了。
