J'écris un vertex shader pour le moment, et j'ai besoin de nombres aléatoires. Le matériel de shader Vertex n'a pas d'opérations logiques/bits, donc je ne peux pas implémenter l'un des générateurs de nombres aléatoires standards. Est-il possible de créer un générateur de nombres aléatoires en utilisant seulement l'arithmétique standard? le hasard ne doit pas être particulièrement bon!Génération de nombres aléatoires sans utiliser d'opérations sur les bits
Répondre
Si vous ne me dérange pas merdiques hasard, une méthode classique est
x[n+1] = (x[n] * x[n] + C) mod N
où C et N sont des constantes, C! = 0 et C! = -2, et N est premier. C'est un générateur pseudo-aléatoire typique pour l'affacturage Pollard Rho. Essayez C = 1 et N = 8051, cela fonctionne bien.
Les shaders Vertex ont parfois des générateurs de bruit intégrés, tels que la fonction noise()
de cg.
HLSL a une fonction de bruit que je pouvais utiliser: http://msdn.microsoft.com/en-us/library/bb509629(VS.85).aspx Cependant chaque fois que je l'ai utilisé dans le passé, il est jamais travaillé, en fait jusqu'à récemment, je crois qu'il a été marqué comme "pas encore mis en œuvre"! – Martin
Utilisez un linear congruential generator:
X_(n+1) = (a * X_n + c) mod m
Ce sont pas forts, mais au moins ils sont bien connus et peuvent avoir de longues périodes. La page Wikipedia a aussi de bonnes recommandations:
La période d'un LCG général est au plus m, et pour certains choix d'une beaucoup moins que cela. Le LCG aura une période complète si et seulement si:
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
croyiez ou non, j'utilisé newX = oldx * 5 + 1 (ou une légère variation de celui-ci) dans plusieurs jeux vidéos. L'aléatoire est horrible - c'est plus une séquence brouillée qu'un générateur aléatoire. Mais parfois c'est tout ce dont vous avez besoin. Si je me souviens bien, il passe en revue tous les chiffres avant qu'il ne se répète.
Il a des caractéristiques terribles. Il ne vous donne jamais le même nombre deux fois de suite. Quelques-uns d'entre nous ont fait un tas de tests sur les variations et nous avons utilisé quelques variations dans d'autres jeux.
Nous l'avons utilisé quand il n'y avait pas de bon modulo à notre disposition. C'est juste un décalage de deux et deux ajouts (ou un multiplier par 5 et un ajout). Je ne l'utiliserais jamais de nos jours pour des nombres aléatoires - j'utiliserais un LCG - mais peut-être que cela fonctionnerait bien pour un shader où la vitesse est cruciale et votre jeu d'instructions peut être limité.
hehe, c'est un RNG intéressant, le plus mathématiquement facile à comprendre que j'ai vu à coup sûr! Je vais jouer avec ça, puisque comme tu le dis, la vitesse est cruciale. – Martin
- 1. Génération de nombres aléatoires sur Spartan-3E
- 2. génération de nombres aléatoires dans un vecteur
- 3. Excel 2007 question sur les nombres aléatoires
- 4. Génération de nombres aléatoires dans chaque ligne Oracle Query
- 5. affichant des nombres aléatoires
- 6. Générateur de nombres aléatoires Crappy
- 7. Convertir une séquence de nombres en ID aléatoires?
- 8. Pourquoi utilisez-vous un générateur/extracteur de nombres aléatoires?
- 9. Comportement en ligne déroutant du générateur de nombres aléatoires (C++)
- 10. Génération de clés 128 bits avec keytool
- 11. Comment gérer les grands nombres entiers (64 bits) dans tcl?
- 12. Un générateur de nombres aléatoires qui peut obtenir des nombres différents en <une seconde
- 13. Ajout de deux nombres de 64 bits dans l'assemblage
- 14. SPARC - Masque de bits sans décalage
- 15. Comment utiliser les différents types de nombres dans l'objectif C
- 16. Comment remplir une colonne de base de données avec des nombres aléatoires
- 17. Générateur de nombres aléatoires qui produit une distribution de loi de puissance?
- 18. Génération d'un ensemble d'événements aléatoires à une fréquence prédéfinie
- 19. x86 question sur les comparaisons de bits
- 20. Impossible d'exécuter les applications 32 bits sur Linux 64 bits
- 21. Les lignes aléatoires sur les tables bug dans Firefox
- 22. pourquoi les nombres aléatoires à 1 chiffre sont également générés par le code suivant?
- 23. Est-ce une bonne ou une mauvaise façon de générer des nombres aléatoires pour chaque enregistrement?
- 24. Les nombres les plus fréquemment répétés dans une énorme liste de nombres
- 25. Comment obtenir la somme des nombres de listes imbriquées dans un dictionnaire sans utiliser foreach?
- 26. Application java 64 bits à utiliser 32 bits dll
- 27. Application DirectX sur les fenêtres 64 bits
- 28. Quelqu'un recommande un bon tutoriel sur les champs aléatoires conditionnels
- 29. Solr - Obtenir les nombres de facettes sans renvoyer les résultats de recherche
- 30. Génération de séquence simple?
qui semble être assez aléatoire, merci! – Martin
Bien sûr. Vous n'avez pas besoin d'une grande qualité statistique pour les graphiques. –