제안
는 대신 포인트의 쿼드를 사용하여 방법 이상의 디스플레이 유연성을 얻을 수 있습니다. 기본적으로 각 입자에 대한 정점 데이터를 넣습니다.
//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..,
따라서 각 입자의 데이터는 각 쿼드의 각 정점마다 동일합니다. 즉 당신은
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
지금 당신이 회전 스케일, 그리고 쉐이더에서 쿼드 방향을, 그것은 그러나 당신이 원하는 당신이 POINTS
함께 할 수없는 무언가를 상쇄 할 수있다.
입자 시스템이 결정적 일 경우 (모든 입자의 위치가 전적으로 시간 만 기반이기 때문에) 모든 변수를 특성 및 유니폼에 넣을 수 있으며 유니폼으로 시간을 전달할 수 있습니다.
an example of this kind of system here을 볼 수 있습니다. 이 입자는 전적으로 GPU에서 실행됩니다. 전달 된 유일한 것은 투영을위한 시간과 매트릭스입니다. 시간이 지남에 따라 회전, 시간에 따라 회전, 시간에 따른 속도 및 가속도, 심지어 시간에 따른 애니메이션 텍스처 (예에서 숫자 참조)를 사용하여 입자를 3D로 방향 지정합니다 (예제의 숫자 참조).
이러한 기술 위에, particle 시스템은 결정적이지 않습니다. 즉, 모든 프레임이 바뀌는 상태를 의미합니다. 텍스처를 프레임 버퍼 객체에 첨부하여 텍스처에 상태를 쓸 수 있습니다. 시스템이 부동 소수점 텍스처를 지원하는 경우 RGBA
/FLOAT
에 쓰고 이후 그리기 호출에서 해당 텍스처를 버텍스 또는 프래그먼트 셰이더의 입력으로 읽을 수 있습니다.
There's an example here. 계산에 사용되는 텍스처를 볼 수도 있습니다.
쿼드 방법은 확실히 내 프로젝트에 유용 할 것입니다. 파티클 시스템은 비 결정적이므로 두 번째 예제는 매우 유용합니다. – newprogrammer