使用帧缓冲对象和插件扩展图形应用程序
1. 使用帧缓冲对象进行覆盖绘制
在处理复杂的3D场景时,我们常常需要在其上方绘制简单的注释。如果场景非常复杂,渲染可能需要数秒时间。为避免在注释更改时重复渲染整个场景,我们可以使用X11覆盖层或OpenGL内置的覆盖支持。近年来,像素缓冲区(pbuffers)和帧缓冲对象(framebuffer objects)的出现为实现覆盖绘制提供了更方便、灵活的方法。
其基本思路是将3D场景渲染到一个离屏表面,然后将该表面绑定到一个纹理上。通过绘制一个矩形将纹理映射到屏幕上,再在其上方绘制注释。当注释发生变化时,我们只需重新绘制矩形和注释即可。
下面通过“Teapots”应用程序来具体说明这一技术。该应用程序包含一个OpenGL窗口,显示一组茶壶,并允许用户通过鼠标点击和拖动在上方绘制橡皮筋。除了窗口调整大小时,茶壶的位置和状态不会改变。该应用依赖帧缓冲对象来存储茶壶场景。
以下是“Teapots”类的代码实现:
class Teapots : public QGLWidget
{
Q_OBJECT
public:
Teapots(QWidget *parent = 0);
~Teapots();
protected:
void initializeGL();
void resizeGL(int width, int height);
void paintGL();
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QM
超级会员免费看
订阅专栏 解锁全文
5万+

被折叠的 条评论
为什么被折叠?



