Présentation

  • : XNA Coding 4 the mass
  • digital-squad
  • : Techno
  • : Ce blog traite de la programmation de Jeux video en 3D pour XNA. C'est un site en francais, et très accessible aux débutant grâce à ses tutoriaux écrits et videos ! De plus, si l'envi vous prend d'écrire un tuto, nous le posterons avec grand plaisir !
  • Recommander ce blog
  • Retour à la page d'accueil

Texte libre

Attention, tous les articles ne sont pas affichés sur la page, veuillez naviguer par catégories pour voir tout le contenue du site.

Recommander

Cliquez ici pour recommander ce blog
Samedi 24 mars 2007
Tirage aléatoires
Par Digital Guru

1  Introduction

Dans le monde des jeux video, l'aléatoire est necessaire pour faire des rendus qui soient réalistes et pas seulement le reflet d'un effet mathématiquement parfait ! Imaginez un moteur de particules sans un bon générateur pseudo-aléatoire ! C'est pourquoi il m'a semblé necessaire de faire un (court) papier sur la génération de nombres pseudo-aléatoires. Une variante à la morose classe Random, qui n'est pas capable de nous pondre 100 nombres différents !

2  Définition de l'aléatoire

Un générateur de nombres pseudo-aléatoires est un algorithme qui génère une séquence de nombres présentant certaines propriétés du hasard. Par exemple, les nombres sont supposés être approximativement indépendants les uns des autres, et il est potentiellement difficile de repérer des groupes de nombres qui suivent une certaine règle (comportement de groupe).
Cependant, les sorties d'un tel générateur ne sont pas entièrement aléatoires ; elles s'approchent seulement des propriétés idéales des sources complètement aléatoires. John von Neumann insista sur ce fait avec la remarque suivante : " Quiconque considère des méthodes arithmétiques pour produire des nombres aléatoires est, bien sûr, en train de commettre un péché. De vrais nombres aléatoires peuvent être produits avec du matériel qui tire parti de certaines propriétés physiques stochastiques (bruit d'une résistance par exemple). "
La raison pour laquelle on se contente d'un rendu pseudo-aléatoire est : d'une part qu'il est difficile d'obtenir de " vrais " nombres aléatoires et que, dans certaines situations, il est possible d'utiliser des nombres pseudo-aléatoires, en lieu et place de vrais nombres aléatoires ; d'autre part, que ce sont des générateurs particulièrement adaptés à une implémentation informatique, donc plus facilement et plus efficacement utilisables.

3  Un algorithme efficace et rapide !

Je vais vous présenter un algo capable de générer des nombres aléatoires très rapidement et de bonnes qualités (grande répartition et très longue période). A bât les générateurs congruentiels linéaires (pas mal hein ?), et vive les générateur additifs ! Je l'ai tiré de la suite de Fibonacci, la très célèbre !
Voici la définition par récurrence de cette suite : un = (un-24 + un-55) mod M où M est la borne supérieur.
C'est à dire que 0 ³ un £ M
Pour u0, pourquoi ne pas prendre le nombre de ticks écoulé ? ou le nombre de secondes ? C'est aussi simple que ça, il n'y a pas grand chose à rajouter, à part que l'implémentation est ultra simple, l'efficacité démontrée, et d'une rapidité étonnante ! Cependant, dans vos jeux, je vous conseilles de générer un tableau de nombres aléatoires une fois pour toute, et de piocher dedans par la suite !
N'étant pas un pro du domaine, et estimant que vous n'avez pas besoin d'en savoir plus, je vais arrêter mon papier sur ces mots. Cependant, je ne peux que vous conseiller de visiter cette page, très bien faite, et aux mathématiques parfaites :
http://www.alrj.org/docs/algo/random.php
Bon coding à tous !



File translated from TEX by TTH, version 3.77.
On 24 Mar 2007, 22:48.
par DigitalGuru publié dans : [Coding] - Mini tuto
ajouter un commentaire commentaires (2)    recommander
Samedi 24 mars 2007
Les couleurs en infographie
Par Digital Guru

1  Introduction

En infographie (et par conséquent dans XNA) les couleurs ne sont pas gérées de la même manière que dans la vie courante. En effet, nous allons voir que une couleur peut être réprésentez de différentes manières, mais toujours selon la même base.

2  RGB, les trois composantes magiques !

RGB qui signifie Red Green Blue (RVB en français), est l'acronyme des trois couleurs primaires. Ces trois couleurs, vou le savez, permettent de représenter à peu prêt n'importe quelle couleur visible !.
Ainsi, une couleur peut être vue comme la modulation de trois valeurs, allant chacune de 0 à 255. Ce qui fait 2553 couleurs possibles ! En plus de ça, une dernière composante est ajoutée, la composante Alpha (ici notée a) qui définit la valeur de la transparence, ce qui nous fait 2554 couleurs possible soit plus de 4 milliards de couleur possibles. Pas mal non ? Malheureusement, votre moniteur n'est pas capable de toutes les afficher, mais les différences sont tellement infime que l'oeil n'y voit que du feu !
La représentation la plus simple d'une couleur est faite par la classe Color de XNA, et ses paramètre R,G,B et A, qui contiennt respectivement la valeur rouge, verte bleu et a de la couleur. Cependant, il n'est pas tellement aisé de la manipuler pour plusieurs raisons.
  1. Les shaders n'accepte que les Vector4, il faut donc une conversion à chaque image; pas très commode.
  2. Lorsqu'une classe couleur est instanciée, les valeurs ne peuvent plus être modifiée.
  3. Si les couleur sont non transparentes, un canal est utilisé pour rien.
  4. Lors de l'instanciation d'un classe color, de nombreux objets sont crées pour rien.
  5. Les vecteurs s'ajoutent facilement car l'opérateur + est surchargé. De plus ils sont très légers.
Vous l'avez compris, l'utilisation de vecteurs pour stocker une couleur est la meilleur solutions, mais je me dois de vous en présenter une dernière encore très utilisée, car en un seul entier, elle stocke les trois composante R,G et B.

3  Int32 ARGB

Et oui, vous avez bien entendu, en un seul entier, 3 voir 4 composantes peuvent être contenues !
Etudions la fonction de création de cet entier : RGB = R + G ×256 + B ×2562
Je vous épargne la démonstration (mais ceux qui ont étudié les congruences devraient s'en sortir assez facilement) mais sachez que :
  1. R = RGB mod 256
  2. G = E([RGB/256]) mod 256
  3. B = E([RGB/(2562)]) mod 256
(où E(x) est la fonction qui a x associe le grand entier ³ à x (fonction partie entière))
Faisons un petit test avec la couleur blanche : 16777215
R = 16777215 mod 256 = 255
G = E([16777215/256]) mod 256 = E(255,99609375) mod 256 = 255
R = E([16777215/(2562)]) mod 256 = E(255,990087) mod 256 = 255
Nous retrouvons bien nos composantes R,G et B a 255 (ouf :p).
Et la couche a me direz vous ! Et bien, c'est simple, c'est une composante de plus, on l'obtient donc comme ceci : a = B = E([RGB/(2563)]) mod 256

4  Conclusion

Deux choses à retenir. D'abord, vous êtes apte à programmer de nombreux filtres pour vos images, quelque soit le conteneur de couleur (un vecteur, un int, une classe Color). Ensuite, utilisez le plus souvent possible des vecteurs pour traiter vos couleurs.
En espérent que ce papier vous a plu !


File translated from TEX by TTH, version 3.77.
On 24 Mar 2007, 22:51.
par DigitalGuru publié dans : [Coding] - Mini tuto
ajouter un commentaire commentaires (0)    recommander
Jeudi 8 mars 2007
Bon voilà, c'est parti on rentre dans le vif du sujet. Comme vous le savez le blog est consacré à la programmation et tout ce qui tourne autour comme la 3D ou  encore l'algorithmie.
Dans les prochains articles à venir, comme le Squad-Guru est composé de programmeurs expérimentés et un peu moins (lol c'est pour moi le "un peu moins"), nous reviendrons sur tous les problèmes sur lesquels on s'est arraché les cheveux, espérant que cela puisse servir aux coders débutants mais passionés .N'oubliez pas ici le mot d'ordre c'est la passion et rien d'autre (money aussi  mais faut pas le dire ;-)).
Bon voilà, pour terminer une petite blague de programmeur pour mettre dans l'ambiance:
    Un petit garçon bavarde trop avec son voisin, la prof le surprend en pleine conversation et l'envoies au tableau en lui disant tu écris 500 fois "je ne bavardes pas avec mon camarade".
Il va au tableau et écris:

                                                       #include <stdio.h>
                                                      
                                                        int main(void)
                                                       {
                                                                int i;
                                                                for(i = 0; i < 500; i++)
                                                                {
                                                                      printf("Je ne bavardes  pas avec mon camarade.\n");
                                                                }
                                                                return 0;
                                                        }

Morale: coder c'est bon pour l'école !

Bon voilà, c'est pas très drole mais bon si certains d'entre vous en connaisse d'autre envoyez un commentaire avec la blague postée.
par AnologGuru publié dans : [Coding] - Mini tuto
ajouter un commentaire commentaires (0)    recommander

Texte libre




 Pour nous soutenir et nous payer un hebergement correct !
Ca vous coute rien, et nous rapporte tellement...mais croyez moi, on vous oulieras pas dans l'affaire :D

Calendrier

Juillet 2008
L M M J V S D
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
<< < > >>

Recherche

W3C

  • Feed RSS 2.0
  • Feed ATOM 1.0
  • Feed RSS 2.0
publier sur internet sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur avec TF1 Network - Signaler un abus