opengl连续存储和渲染纹理上的多个点

opengl连续存储和渲染纹理上的多个点,opengl,shader,frame,Opengl,Shader,Frame,在我的模拟中,雪粒子作为简单点落在三角形地形上。 现在我想画点并将它们保持在地形纹理的位置, 粒子降落的地方。如何存储数百或数千个点。 我不想将这些点存储在一个巨大的数组中 是否可以绘制空纹理并在下一帧中重用此纹理?使用,可以渲染到纹理 您需要在纹理上累积更改。您有2个选项: 如果您需要对落下的雪进行采样以计算生成的雪层,您可以使用两种纹理并执行所谓的操作 渲染 如果您只是想在不采样已经掉落的像素的情况下累积雪,可以在fbo渲染循环中省略glClear,并将该纹理用作累积缓冲区() 要进行乒

在我的模拟中,雪粒子作为简单点落在三角形地形上。 现在我想画点并将它们保持在地形纹理的位置, 粒子降落的地方。如何存储数百或数千个点。 我不想将这些点存储在一个巨大的数组中

是否可以绘制空纹理并在下一帧中重用此纹理?

使用,可以渲染到纹理

您需要在纹理上累积更改。您有2个选项:

  • 如果您需要对落下的雪进行采样以计算生成的雪层,您可以使用两种纹理并执行所谓的操作 渲染

  • 如果您只是想在不采样已经掉落的像素的情况下累积雪,可以在fbo渲染循环中省略glClear,并将该纹理用作累积缓冲区()

要进行乒乓球渲染,步骤如下:

  • 创建两个相似的纹理,一个源,一个目标,每个帧交换
  • 两者作为两个颜色附件绑定到fbo,通过调用glDrawBuffers在它们之间进行切换,并将目标ColorAtachmentX作为参数传递
  • 将源纹理作为统一绑定到着色器
  • 渲染到fbo
  • 将场景中的目标纹理用作积雪
  • 为新运行交换dest和source纹理

若要知道雪花是否已落地,您也可以使用雪花粒子变量代替颜色数据将雪花作为纹理提供。。。然后,知道雪花是否落在地上是一个考验,但我们正在进入那里的模拟世界…

我的建议是不要试图如此接近地模拟现实。假装

让雪粒子在通过屏幕底部时消亡。然后随着时间的推移,雪会在地面上堆积。表面上的雪不一定等于落下的确切粒子

但是如果你真的想那样做

首先你要处理雪和地面之间的碰撞,然后再处理雪和地面上的雪之间的碰撞。因为你不再把它们都放在一个数组中,所以必须以雪的像素为基础。那是很多的glreadpixles。但是这个问题没有问这个问题,所以我假设你已经解决了这个问题

j-p的答案不错。但我可能会做一些不同的事情:

您只能使用一个动态纹理来完成此操作。渲染如下:

  • 渲染背板
  • 在背板上渲染积雪纹理
  • 渲染雪粒子
  • 然后,每当雪粒子撞击地面或与其碰撞的任何物体时,请执行以下操作:

  • 不要清除它-所以它仍然包含所有以前降下的雪
  • 将碰撞的粒子渲染到“动态雪”纹理
  • 退出在动态纹理上绘制的雪粒子-这些粒子现在已“着陆”

  • 然后在下一帧/下一个循环中,您的动态累积雪纹理上会有降雪。

    听起来您还需要知道雪花何时与地面或其降落的任何物体发生碰撞。我会考虑使用骗子。雪花很小。当他们降落时,谁能说正是降落的雪花导致了地面上的积雪。随着时间的推移,它自然会积累起来。当雪粒子通过屏幕底部时,让它们消失,然后慢慢地在地面上添加雪。好的,他可以在纹理上积累(我上周在fluid simu中使用了这种技术,我必须对输入进行采样),我将更新我的答案,thxthanks,我将尝试乒乓渲染。这就是我要找的。将当前渲染帧中的雪层“保存”到下一帧。在纹理的确切位置绘制雪点是我唯一的问题。我已经尝试过绘制每个三角形或每个高度值的雪,但对于未完全覆盖的区域,它看起来不太好