Ich schreibe im Moment einen Vertexshader, und ich brauche einige Zufallszahlen. Vertex-Shader-Hardware hat keine logischen/Bit-Operationen, daher kann ich keinen der Standard-Zufallsgeneratoren implementieren. Ist es möglich, einen Zufallszahlengenerator nur mit Standardarithmetik zu erstellen? die Zufälligkeit muss nicht besonders gut sein!Zufallsgenerierung ohne Verwendung von Bitoperationen
Antwort
Wenn Sie nicht beschissen Zufälligkeit dagegen, eine klassische Methode ist
x[n+1] = (x[n] * x[n] + C) mod N
wobei C und N Konstanten sind, C! = 0 und C! = -2 und N ist eine Primzahl. Dies ist ein typischer Pseudozufallsgenerator für Pollard Rho Factoring. Versuchen Sie C = 1 und N = 8051, die funktionieren ok.
Vertex Shader haben manchmal integrierte Rauschgeneratoren für Sie zu verwenden, wie zum Beispiel cgs noise()
Funktion.
HLSL hat eine Rauschfunktion haben, die ich verwenden könnte: http://msdn.microsoft.com/en-us/library/bb509629(VS.85).aspx Allerdings, wenn ich es in der Vergangenheit ist es verwendet haben hat nie funktioniert, in der Tat bis vor kurzem, ich glaube, es wurde als "noch nicht implementiert" markiert! – Martin
Verwenden Sie ein linear congruential generator:
X_(n+1) = (a * X_n + c) mod m
Das sind nicht so stark, aber zumindest sind sie gut bekannt und lange Perioden haben. Die Wikipedia-Seite hat auch gute Empfehlungen:
Die Periode einer allgemeinen LCG ist höchstens m, und für einige Entscheidungen eines viel weniger als das. Die LCG eine volle Zeit haben, wenn und nur wenn:
1. c and m are relatively prime, 2. a - 1 is divisible by all prime factors of m, 3. a - 1 is a multiple of 4 if m is a multiple of 4
Ob Sie es glauben oder nicht, habe ich NEWX = oldx * 5 + 1 (oder eine leichte Variation davon) in mehreren Videospielen. Die Zufälligkeit ist schrecklich - es ist eher eine verschlüsselte Sequenz als ein Zufallsgenerator. Aber manchmal ist das alles, was Sie brauchen. Wenn ich mich richtig erinnere, durchläuft es alle Zahlen, bevor es wiederholt wird.
Es hat einige schreckliche Eigenschaften. Es gibt Ihnen niemals die gleiche Nummer zweimal hintereinander. Ein paar von uns machten eine Reihe von Tests auf Variationen davon und wir verwendeten einige Variationen in anderen Spielen.
Wir haben es benutzt, als uns kein Modulo zur Verfügung stand. Es ist nur eine Verschiebung um zwei und zwei Additionen (oder eine Multiplikation mit 5 und eine Addition). Ich würde es heute nie für Zufallszahlen verwenden - ich würde eine LCG verwenden - aber vielleicht würde es OK für einen Shader funktionieren, bei dem Geschwindigkeit entscheidend ist und Ihr Befehlssatz möglicherweise begrenzt ist.
hehe, das ist ein interessanter RNG, der mathematisch leicht verständlich ist, den ich gesehen habe! Ich werde damit spielen, denn wie du sagst ist Geschwindigkeit entscheidend. – Martin
- 1. Zufallsgenerierung
- 2. CUDA Zufallsgenerierung
- 3. Haskell Zufallsgenerierung
- 4. ATMega Zufallsgenerierung
- 5. Eindeutige Zufallsgenerierung mit Datenbanktabelle
- 6. Bessere Zufallsgenerierung PHP
- 7. Zufallsgenerierung in meiner Implementierung
- 8. java Bitoperationen >>>
- 9. Engpass bei der Zufallsgenerierung mit mehreren Threads
- 10. Erklären Sie die Bitoperationen des Codes
- 11. Wie man Bitoperationen in C korrekt verwendet
- 12. Wie führe ich Bitoperationen in glsl aus?
- 13. Wie ohne Verwendung von Methodenparameter
- 14. Verwendung von MKAnnotationView ohne MKMapView?
- 15. Zähle ohne Verwendung von Joins
- 16. Positionserkennung ohne Verwendung von CoreLocation
- 17. Gaußfilter ohne Verwendung von ConvolveOp
- 18. TI-84 Zufallsgenerierung auf einem Computer
- 19. Zuordnung Probleme mit einfachen Zufallsgenerierung in Modelica
- 20. Verwendung von Crashlytics ohne Verwendung von Fabric in iOS
- 21. Anzeige von Zeitzonen ohne Verwendung von UTC
- 22. Verwendung von STL-Containern ohne Boost-Pointer
- 23. Dekodieren entkommene URL ohne Verwendung von HttpUtility.UrlDecode
- 24. Verwendung von Suffixen ohne Std :: Literale
- 25. Live-Video-Streaming ohne Verwendung von Flash?
- 26. IllegalStateException bei Verwendung von ViewPager ohne Fragmente
- 27. Verwendung von Methoden eines Objekts ohne Gießen
- 28. Überblendung Überblendung erforderlich ohne Verwendung von Überblendung
- 29. Running Selen kopflos ohne Verwendung von xvfb
- 30. Anwendungspfad ohne Verwendung von httpcontext abrufen. (asp.net)
das scheint zufällig genug zu sein, danke! – Martin
Sicher. Sie benötigen keine große statistische Qualität für Grafiken. –