OpenGL累积缓存的操作函数详细说明

OpenGL中存在各种缓冲区,用以实现不同功能,(参考缓冲区简介) 。累积缓存(Accumulate Buffer)就是一种,它主要为了辅助累积计算。例如:运动模糊和全局反走样。对于累积缓存的操作,需要使用glAccum()等函数进行。下面是涉及到的主要函数:
(一)void glClearAccum( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
         指定累积缓冲区清空时设置的默认值。包括红、绿、蓝、透明度。默认为0。
(二)void glClear( GLbitfield mask );
         设置mask包括GL_ACCUM_BUFFER_BIT,以实际清除累积缓存中的内容。
(三)void glAccum( GLenum op, GLfloat value);
         对于累积缓存中的内容进行操作。op定义操作,value为操作相关值。具体如下:
         1:GL_LOAD
              将当前缓冲内容装入累积缓存中(直接的复制)。value为装载时的比例系数(0~1.0)。
              R' = R * value

              G' = G * value

              B' = B * value,A' = A * value
         2:GL_ACCUM
              将当前缓冲中的内容和累积缓存中内容进行累积混合,结果放入累积缓存中。
              R' = R*(1.0-value) + R*value

              G' = G*(1.0-value) + G*value
              B' = B*(1.0-value) + B*value

              A' = A*(1.0-value) + A*value 
         3:GL_ADD
              将累积缓存中的内容加特定值。
              R' = R' + value

              G' = G' + value

              B' = B' + value

              A' = A' + value
         4:GL_MULT
              将累积缓存中的内容乘以特定值。
              R' = R' * value

              G' = G' * value

              B' = B' * value

              A' = A' * value
         5:GL_RETURN
              将累积缓存中的内容拷贝到颜色缓存或当前选择缓冲区。
              R = R' * value

              G = G' * value

              B = B' * value

              A = A' * value

实际应用时,可以遵循下列参考步骤:
(一)调用glAccum(GL_LOAD, value)将选定缓冲区内容装入累积缓存中。
(二)调用glAccum(GL_ACCUM, value)、glAccum(GL_ADD, value)或glAccum(GL_MULT, value)进行累积计算。
(三)glAccum(GL_RETURN, value)将结果返回给指定的缓冲区。
注:当前选定缓冲区可以由glReadBuffer()指定,默认为后颜色缓冲区。

下面为一个实际的运动模糊实例:

void DrawMotionBlur()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    gluLookAt(0.0,0.0,10.0,0.0,0.0,0.0,0.0,1.0,0.0);

    GLfloat angle = 0.0f;
    for(int i = 0; i < COUNT; i++)

    {
        DrawObject(angle);
        angle += 10.0f;
        if(0==i)
             glAccum(GL_LOAD,1.0f/COUNT);
        else
             glAccum(GL_ACCUM,1.0f/COUNT);

    }
    glAccum(GL_RETURN, 1.0f);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值