博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
累积缓存及其应用
阅读量:2439 次
发布时间:2019-05-10

本文共 1573 字,大约阅读时间需要 5 分钟。

    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);
}

    注: 累积缓存可以采用多次渲染加透明混合实现类似效果。

转载地址:http://mqwqb.baihongyu.com/

你可能感兴趣的文章
MySQL 4.1.0 中文参考手册 --- 6.2 列类型 (转)
查看>>
MySQL 4.1.0 中文参考手册 --- 6.4 数据操纵:SELECT, INSERT, UPDATE, DELETE (转)
查看>>
MySQL 4.1.0 中文参考手册 --- 6.6 基本的 MySQL 用户实用命令 (转)
查看>>
Dos下键盘的完全控制 ------- 一系列的BIOS级别的键盘控制函数! (转)
查看>>
利用weblogic的POOL(连接池)连接数据库 (转)
查看>>
vs.net beta 2中利用DataGrid分页详解 (转)
查看>>
WebLogic的初步研究(2)--结构篇 (转)
查看>>
Process-Display-Process (PDP) pattern (转)
查看>>
基于构件复用的软件方法与COM支持 (转)
查看>>
DELPHI中使用API函数详解 (转)
查看>>
Single Entry Point to EJB Layer (转)
查看>>
InsideJVM(3)--Method area(方法区) (转)
查看>>
VC++初学者常见问题解惑 (转)
查看>>
dbms_stats
查看>>
Delphi实用编程经验二则 (转)
查看>>
Delphi之快速设计(程序设计篇) (转)
查看>>
piner倾力打造《构建oracle高可用环境》第一章下載
查看>>
Delphi:易混淆的概念 (转)
查看>>
关于dbms_stats 的问题
查看>>
在应用程序中开关WINDOWS系统 (转)
查看>>