Muhtemelen bunu nasıl yapacağım, böylece bazı sanat kontrolünü koruyabilir ve doğru bir şekilde elde etmek için prosedürel bir yöntemi değiştirmeye uzun zaman harcayamazdım ...
İlk olarak, elinizdeki "havuz" olarak çay yaprağı kümelerinin bir dizi spritesini oluşturun - her biri bir fincanın tamamı çay yaprağı değerinde değil, daha küçük bir gruplama gibi. Söyle, 20 kadarı?
Sonra "fincan" üssünde rastgele koordinatlara rastgele bir sayı yerleştirin. Her birine rastgele bir döndürme ve ölçek artı rastgele yatay ve / veya dikey yansıtma verin. Bu iyi bir sonuç yaratmalı.
Bu yaklaşım, istediğiniz görünüme sahip olmak için bireysel kümeleri yaratmada sanatsal özgürlük sunarken, çok çeşitli sonuçlara izin verir (seçim için yeterli sprite varsayarak).
Ek olarak, bu (ve Perlin gürültüye dayalı herhangi bir rastgele yöntemle), tekrarlanabilir sonuçlar elde etmek için rastgele sayı üretecini işlemin başlangıcında bilinen bir tohumla tohumlayabilirsiniz. Çekirdeği kaydederseniz, sekans başlamadan hemen önce yeniden tohumlayarak aynı modeli tekrar oluşturabilirsiniz. Hatta birinin adını yazması, harfleri bir sayıya dönüştürmesi (toplam ASCII, vb.) Gibi eğlenceli şeyler bile yapabilir, daha sonra bunu tohum olarak bir çeşit "SİZİN için özelleştirilmiş bu çay yaprağı deseni!" şey.
İşte demek istediğim şey için bazı sözde kod, eğer yardımcı olursa ...
var sprites = [...]; // Array of tea leaf sprites
var n_leaves = rand(5)+5; // Random number of leaves from 5-9
for (i=0; i<n_leaves; i++) {
var sprite_index = rand(sprites.length); // Random sprite index
var r = rand(CUP_DIAMETER); // Random radius for point on disk calc
var theta = rand(2*PI); // Random theta (rotation) for point on disk
var sprite_x = sqrt(r) * cos(theta); // Sprite X
var sprite_y = sqrt(r) * sin(theta); // Sprite Y
var sprite_rotation = rand(2*PI); // Sprite rotation
var sprite_scale = rand(1) + 0.5; // Sprite scale from 0.5 to 1.5
var sprite_h_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror horizontally
var sprite_v_mirror = (rand(1) < 0.5 ? true : false); // If true, mirror vertically
draw_sprite(sprite_index, sprite_x, sprite_y, sprite_rotation, sprite_h_mirror, sprite_v_mirror);
}
Check out http://mathworld.wolfram.com/DiskPointPicking.html bir diskte rasgele nokta seçimiyle ve neden şey çünkü / bu bütün sqrt / sin kullanıyorum nasıl büyük bir tartışma için.