SORU
16 Kasım 2010, Salı


Gürültü fonksiyonları rasgele / GLSL için

GPU sürücüsü satıcılar genellikle GLSL noiseX uygulamak için zahmet etmeyin, bir şey arıyorum< . em ^"rasgele isviçre çakısı" . grafik fayda fonksiyonu ayarlayın, tercihen GPU gölgeleme içinde kullanılmak için optimize edilmiş. GLSL, ama herhangi bir dil, benim için, tek başıma çevirmek için sorun yok yapacak kod GLSL tercih ederim.

Özellikle beklerdim:

a)Pseudo-rastgele fonksiyonları- N-boyutlu, tekdüze dağılım içinde [-1,1] veya [0,1], hesaplanan M-boyutlu tohumu (ideal olmanın herhangi bir değer, ama iyiyim sahip tohum ölçülü için, diyelim ki, 0..1 için aynı sonucu dağıtım). Gibi bir şey

float random  (T seed);
vec2  random2 (T seed);
vec3  random3 (T seed);
vec4  random4 (T seed);
// T being either float, vec2, vec3, vec4 - ideally.

b)Sürekli gürültüPerlin Gürültüsü gibi - tekrar, N-boyutlu homojen dağılımı ile kısıtlı set değerleri ve, iyi, iyi görünüyor (bazı seçenekleri yapılandırmak için görünüm gibi Perlin düzeyde yararlı olabileceğini de. İmza gibi beklerdim:

float noise  (T coord, TT seed);
vec2  noise2 (T coord, TT seed);
// ...

Rasgele sayı üretimi çok teori haline değilim, en istekli bir giderdimönceden yapılmış bir çözümama cevapları da memnun olurum< . em ^"burada çok iyi, verimli bir 1D rand () ve beni N-boyutlu iyi bir rand nasıl anlatayım() üzerine...".

CEVAP
25 Kasım 2010, PERŞEMBE


Çok basit rastgele görünen şeyler, internette bir yerde bulduğum bu oneliner kullanıyorum:

float rand(vec2 co){
    return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
}

Sen-ebilmek da üretmek bir gürültü doku kullanarak ne olursa olsun PRNG senin gibi, sonra karşıya bu normal moda ve örnek değerleri içinde shader; ben kazmak bir kod örneği daha sonra Eğer isterseniz.

Ayrıca, Stefan Gustavson'a tarafından Perlin ve Simplex gürültü GLSL uygulamaları, this file check out.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CommonArtisan

    CommonArtisa

    7 Temmuz 2012
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009
  • Ryan Ha

    Ryan Ha

    9 NİSAN 2006