Niektóre propozycje
sposób można uzyskać większą elastyczność wyświetlania używając quady zamiast punktów. Można w zasadzie umieścić w danych wierzchołków dla każdego coś cząstek jak
//localX, localY, data for particle, data for particle, ...
-1, -1, gravityForParticle0, velocityForParticle0, etc..,
1, -1, gravityForParticle0, velocityForParticle0, etc..,
-1, 1, gravityForParticle0, velocityForParticle0, etc..,
1, 1, gravityForParticle0, velocityForParticle0, etc..,
-1, -1, gravityForParticle1, velocityForParticle1, etc..,
1, -1, gravityForParticle1, velocityForParticle1, etc..,
-1, 1, gravityForParticle1, velocityForParticle1, etc..,
1, 1, gravityForParticle1, velocityForParticle1, etc..,
-1, -1, gravityForParticle2, velocityForParticle2, etc..,
1, -1, gravityForParticle2, velocityForParticle2, etc..,
więc dane dla każdej cząstki jest identyczny dla każdego wierzchołka każdego quad. Innymi słowy trzeba
unit vertex #0, particle0 data
unit vertex #1, particle0 data
unit vertex #2, particle0 data
unit vertex #3, particle0 data
unit vertex #0, particle1 data
unit vertex #1, particle1 data
unit vertex #2, particle1 data
unit vertex #3, particle1 data
unit vertex #0, particle2 data
unit vertex #1, particle2 data
unit vertex #2, particle2 data
unit vertex #3, particle2 data
Teraz można obracać, skalować i zorientowania quad w swoim cieniującego i przesunięcie go jednak chcesz, coś, czego nie można zrobić z POINTS
.
Ponadto, jeśli twój system cząsteczek jest deterministyczny (jak w przypadku każdej cząstki opiera się wyłącznie na czasie), możesz umieścić wszystkie swoje zmienne w atrybutach i mundurach i po prostu przekazać czas jako mundur.
Możesz zobaczyć an example of this kind of system here. Cząstki te działają całkowicie na GPU. Jedyne, co minęło, to czas i matryce do projekcji. Zajmują się orientowaniem cząstek w 3D, zmieniają kolor z upływem czasu, obracają się z czasem, pozycją z prędkością i przyspieszeniem w czasie, a nawet animacją tekstur w czasie (zobacz liczby w przykładzie).
Oprócz tych technik, jeśli system cząsteczek nie jest deterministyczny, co oznacza, że masz stan, który zmienia każdą klatkę, możesz zapisać stan do tekstury, dołączając teksturę do obiektu bufora ramki. Jeśli twoja maszyna obsługuje tekstury zmiennoprzecinkowe, możesz napisać do RGBA
/FLOAT
i odczytać tę teksturę jako dane wejściowe w shaderze wierzchołków lub fragmentów w kolejnym wywołaniu rysowania.
There's an example here. Możesz nawet wyświetlić teksturę używaną do obliczeń.
Metoda quadowa z pewnością przyda się w moim projekcie. Nasz system cząsteczek jest niedeterministyczny, więc twój drugi przykład jest niezwykle pomocny. – newprogrammer