在我的模拟雪粒子中,简单的点落在三角形地形上。 现在我想绘制点并将它们保持在地形纹理的位置, 粒子落地的地方。我如何存储数百或数千个点。 我不想将这些点存储在一个巨大的阵列中。
是否可以在空纹理上绘制并在下一帧中重复使用此纹理?
答案 0 :(得分:0)
使用Frame buffer objects,您可以渲染到纹理。
您需要在纹理上累积更改,您有2个选项:
如果您需要对积雪进行采样以计算产生的雪层,您可以使用两个纹理并执行所谓的 ping pong呈现
如果您只是想要积累雪而不对已经下降的像素进行采样,则可以在fbo渲染循环中省略glClear并将该纹理用作累积缓冲区(link)。
对于乒乓球渲染,步骤如下:
要知道雪花是否已经落地,你可以提供落雪花作为纹理,雪粒子变量代替颜色数据...然后知道雪花是否已经击中地面进行了fragment world pos的测试,但我们正在那里进入模拟世界......
答案 1 :(得分:0)
我的建议是不要试图如此贴近现实。假它。
当雪粒通过屏幕底部时,它们会死亡。然后随着时间的推移积雪在表面积累。表面上的雪并不等于落下的确切颗粒。
但如果你真的真的想这样做......
首先,你不得不以某种方式处理雪与地面之间的碰撞,然后是雪与地面之间的雪。因为你不再将它们全部放在一个数组中,所以不得不基于雪的像素。这是很多glreadpixles。但是在这个问题上没有问过,所以我假设你已经覆盖了那个。
j-p的答案还不错。但我可能会做的有点不同:
只能使用一个动态纹理。渲染如下:
然后,只要雪粒击中地面或任何碰撞的地方,就可以做到这一点:
然后下一个帧/周期,你的动态累积雪纹理就会有积雪。