Một số đề xuất
Bạn có thể linh hoạt hơn bằng cách sử dụng quad thay vì điểm. Về cơ bản, bạn đặt dữ liệu đỉnh cho mỗi hạt giống như
//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..,
Vì vậy, dữ liệu cho mỗi hạt giống hệt nhau cho mỗi đỉnh của mỗi quad. Nói cách khác bạn có
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
Bây giờ bạn có thể xoay, quy mô và định hướng quad trong shader của bạn và bù đắp nó tuy nhiên bạn muốn, một cái gì đó bạn không thể làm với POINTS
.
Ngoài ra, nếu hệ thống hạt của bạn là xác định (như ở vị trí của bất kỳ hạt nào chỉ dựa trên thời gian) thì bạn có thể đặt tất cả các biến của bạn trong thuộc tính và đồng phục và chỉ cần chuyển trong thời gian như một bộ đồng phục.
Bạn có thể xem an example of this kind of system here. Những hạt này chạy hoàn toàn trên GPU. Điều duy nhất trôi qua là thời gian và ma trận để chiếu. Họ xử lý định hướng các hạt trong 3D, thay đổi màu theo thời gian, xoay theo thời gian, vị trí với vận tốc và gia tốc theo thời gian, thậm chí là hoạt ảnh kết cấu theo thời gian (xem các số trong ví dụ)
Trên hết các kỹ thuật đó, hệ thống hạt không xác định, nghĩa là bạn có trạng thái thay đổi mọi khung hình, bạn có thể viết trạng thái thành một kết cấu bằng cách gắn kết cấu vào đối tượng framebuffer. Nếu máy của bạn hỗ trợ các kết cấu dấu chấm động thì bạn có thể ghi vào một số RGBA
/FLOAT
và đọc kết cấu đó làm đầu vào trong bóng đổ hoặc phần đổ bóng trong cuộc gọi vẽ tiếp theo.
There's an example here. Bạn thậm chí có thể xem kết cấu đang được sử dụng để tính toán.
Phương pháp quad chắc chắn sẽ hữu ích cho dự án của tôi. Hệ thống hạt của chúng tôi là không xác định nên ví dụ thứ hai của bạn cực kỳ hữu ích. – newprogrammer