使用OpenGL的变换反馈(transform feedback)构造粒子系统

本文介绍了如何使用OpenGL的变换反馈技术构建粒子系统,以解决CPU更新粒子状态导致的数据传递效率问题。通过在GPU中维护粒子状态,利用两个shader分别用于更新和渲染,实现了更高效的粒子渲染。变换反馈结合几何着色器,使得粒子系统能够实现更加流畅的视觉效果。
摘要由CSDN通过智能技术生成

 粒子系统是三维计算机图形学中用来模拟火,爆炸,雾,雪,流行尾迹或者发光轨迹等视觉效果的技术。粒子系统模拟这些现象的步奏简单的分为以下两步:

  1. 更新每个粒子的属性,如粒子的颜色、速度,位置等。

  2. 渲染粒子。采用billboard和纹理渲染粒子对象。

  粒子系统负责管理粒子的个数和属性,当粒子结束生命周期时,如粒子的位置变换到特定的位置后,粒子系统负责将粒子设置为初始状态并开始新的旅程。但粒子系统有如下两个问题:

  1. 粒子系统是在CPU中更新粒子的状态。每次更新状态后都需要将数据从cpu端拷贝到GPU端,假设粒子状态每帧都更新,那么数据的传递将对渲染的效率产生很大的影响。

  2. 粒子系统中对粒子状态的更新都是用的同一个方法,GPU正好适合处理这样的运算。

  我们可以只往GPU中传递一次粒子的初始属性,然后在GPU中维护粒子的属性并进行渲染。过程如下:

  1. 使用两个shaderprogram,其中一个shader负责更新粒子的属性,另一个shader负责渲染渲染。

  2. 利用变换反馈(transform feedback)将两组顶点缓冲区轮流作为渲染用的顶点数据,和保存更新后的顶点数据。变换反馈位于几何图形着色器和顶点装配阶段之间。因为几何着色器是可选的,如果不使用几何着色器,这些数据实际上是来自顶点着色器。变换反馈允许将一个顶点找色器或者几何着色器的结果保存到一个缓冲区中,这个缓冲区中保存的更新后的数据作为下一步的渲染使用。OPenGL中使用变化反馈的示例如下:

const char *tf_varying[]= { "out_position","out_color"};     glTransformFeedbackVaryings(update_program,2,tf_varying,GL_SEPARATE_ATTRIBS);

这两句话指明负责更新粒子状态的shader中的输出变量"out_position"和"out_color"将被被保存到变换反馈缓冲区中,需要在shader链接之前指定。然而变换反馈并没有真正的缓冲区,它只是一个绑定点,需要将真正的缓冲区绑定到该绑定点:

  glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER,0,render_positionBuffer);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值