Présentation

  • : XNA Coding 4 the mass
  • digital-squad
  • : Internet
  • : 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
Lundi 12 mars 2007
Metaballs 2D


Pour le premier tutorial de ce blog, j'ai décider de commencer doucement, mais agréablement :
En effet, pendant qu’AnalogGuru s'occupera des tuto plutôt pour "débutant", je me ferais les trucs un peu plus poussés. En fait pas forcément, mais je n'expliquerai pas chaque lignes de mon code : D
Pour en revenir au sujet de l'article, rappelez vous des vielles démo 96k où vous avez pus voir des  boules de plasma virevolter, parfois sous un petit air de ray tracing ! Et bien, ce soir, même si nous n'allons pas coder de metaballs en 3D, ( car pour que ça puisse tourner, il est nécessaire d'utiliser un algo fort puissant mais assez chiant à mettre en œuvre ( peut être un prochain tuto :-D), : les marching cube) nous allons tout de même réaliser un bel effet 2D ce qui simplifiera grandement les calculs.

     Attention, je tiens juste à prévenir ceux qui sont allergique aux maths, les première partie, est relativement compliqué à mettre en pratique, donc pour ceux qui ne veulent pas forcément comprendre le concepte mais juste obtenir un résultat, rdv à la partie III !

I - Théorie :
 
Note : Désolé pour la gueule des formules, mais le site ne prend pas en charge le code LaTeX et je serais obliger de les ecrire comme ça jusqu'à trouver une solution !

Les metaballs ont été introduites il y a fort longtemps dans la scène démo. Pour faire l’analogie avec la vie courante, imaginez ces bonnes vieilles lampes à plasma, celles devant lesquelles on a tous badé quelques minutes en imaginant de la lave en fusion ! Et bien aujourd’hui, nous allons faire de même en 2D pour le moment, mais c’est un bon début !

 

            Pour créer ces boules de cire et de pétrole avec nos petits pixels, nous devons introduire quelques notions mathématiques.

En effet, ici notre écran sera un champ scalaire (qu’est ce qu’un champ scalaire ? C’est une entité mathématique qui associe une valeur à chaque point du plan). La valeur des différents points sera modifiée par le potentiel de chacune de nos metaball. Le potentiel des metaballs est une sorte de rayonnement qui s’atténue relativement vite avec la distance. Pour calculer ce potentiel, nous utiliserons la fonction inverse qui nous donnera plus ou moins ceci :

Après ce cours de maths au combien difficile : codons !

 
II - Approche naïve du programme :
 

            Je me justifie juste sur le titre : Approche « naïve ». Le mot « naïve » est seulement utilise pour justifier que nous allons donc appliquer la théorie telle quelle et laisser tomber toute optimisation pour le moment.

Ainsi, pour chaque pixel de notre viewport (la zone de rendu), nous allons calculer la distance entre le centre de notre metaball, et le pixel courant. Pour ceux qui n’aurais aucune envie de réfléchir :

Soit D la distance entre le centre de notre metaball, et le pixel courant,
A(X ;Y) est le point courant,
et C(Xc ;Yc) le centre de notre metaball

=> D = Sqrt((X-Xc)² + (Y-Yc)²)

Puis nous allons calculer le potentiel en ce point. Le principe est simple. La valeur α maximale est 255 et c’est celle au centre de la metaball. Le but est de trouver une valeur normalisée du potentiel (c'est-à-dire >= 0 et  <= 1).

Soit P le potentiel et DMax la distance maximale possible :

P = | D/DMax –1 |

Ainsi, la composante α à pour valeur en A : 255 * P.

            Je n’ai pas codé cette approche, car elle est très simple et ne permet pas de produire des rendus temps réels. En effet, de nombreux calculs complexes sont necessaires ( racine, division, mise au carré etc.), et ce, pour chaque point ! Ce qui, pour une résolution de 800x600 nous obligerai à faire ce calcule 480 000 fois, pour une seule image, c'est-à-dire 14 400 000 fois pour 30 images par secondes !

Optimisons donc !
 
III - Une sacrée optimisation :
 

En réfléchissant un peu, qu’est ce qu’une metaball ? Une forme dont la valeur alpha diminue avec la distance. Alors pourquoi ne pas précalculer l’image de cette metaball ? Vous l’avez compris, nous allons non plus considérer nos metaballs comme des objets mathématiques, mais comme des textures, et au lieu d’utiliser un blending classique, nous allons utiliser une modulation additive. C'est-à-dire que le device va simplement ajouter les valeurs α au pixel courant, et la clamper (c’est-à-dire, la borner) entre 0 et 255.

    Ainsi, nous obtenons un résultat très facilement grâce à un simple spritebatch, et sans aucunes formules mathématiques En effet, il suffit juste d'afficher la texture précalculée du metaball avec la couleur désirée, avec le blending en additif et de faire bouger tout ca, rien de plus simple !
La mise en oeuvre est simple, reportez vous aux tuto XNA pour apprendre à charger et afficher une texture, cependant, la seule petite difficulté est de placer le blending en Additif.
C'est simple, au rendu, régler le spritebatch comme ceci :
[CODE]
SprBatch.Begin(SpriteBlendMode.Additive);

Sinon, la texture de la metaball est dispo dans le code source, ou pour les flemmard du DL ici ( ne vous inquiétez pas si vous ne voyez rien, c'est du blanc sur un fond blanc, mais après le rendu modulé ( Cf tuto...), la couleur change biensûr.

Je n'ai pas traiter les collisions, ou les animations des metaballs car ces deux sujets feront l'objets de 2 gros tutos !

Sinon, pour toutes les petits problèmes : le code source est dispo ici. L'exe quant à lui : ici !

Un petit screen pour vous donner le resultat attendu quand même :


Enfin ,n'hésitez pas à pauser des questions en commentaires, ou à faire des critiques (constructives si possible) +++
par DigitalGuru publié dans : [Coding] - Tuto
ajouter un commentaire commentaires (0)    recommander
Dimanche 11 mars 2007
Salut tout le monde ! AnalogGuru et moi même avions pensé vous pondre un beau tuto sur les bases du C et du C++, allant de la première compilation jusqu'à votre premier jeux, en passant par ce qu'il faut avoir, et où trouver tout ça. Mais comme on est flemmard, j'ai l'honneur de présenter à ceux qui ne connaissent pas (ils sont hélàs trop nombreux), le meilleur tutorial en français sur les bases du C et du C++.
Voici le plan du cours, ainsi que les liens correspondant !
Bon coding à tous, et sachez quand même que nous n'avons pas rédigé de tuto par fénéantise, mais seulement parce que nous n'allons pas refaire ce qui à déjà été très bien fait !
par DigitalGuru - AnalogGuru publié dans : Rien de space'
ajouter un commentaire commentaires (0)    recommander
Dimanche 11 mars 2007
Salut les lecteurs, c'est l'heure de coder^^ Alors le Squad a décidé de commencer cette série de tutoriel par XNA. XNA permet le développement de jeux vidéos pour Windows et Xbox 360. Comme je suis accro au jeu vidéo et que je possèdes une Xbox 360, héhé, ( à mort la playStation 3, sauf son lecteur Blu-Ray ;-) ), J'ai donc le plaisir de de commencer ce tutoriel.

Ce qu'il vous faut pour coder sous XNA et créer des jeux dignes des grands studios:

-Tout dabord, il faut un ordinateur je penses que ça ne doit pas trop poser de problèmes.

-Ensuite, il vous faudra télécharger Microsoft Visual C# 2005 Express Edition car les développeurs de XNA ont opté pour le C#, c'est un puissant language orienté objet qui allie les avantages du C++ et JAVA.

-Puis, vous devrez vous procurez Microsoft XNA Game Studio Express.

-Enfin, ultérieurement, nous aurons besoin de Microsoft DirectX SDK. Vous prendrez la version la plus récente, moi j'ai la version de Décembre 2006.

voilà,  j'ai délibérement mis aucun lien pour vous forcer à chercher les informations car sachez-le bien la recherche est l'un des meilleurs outils du programmeur car l'informatique est un domaine qui évolue sans cesse. L'informaticien doit toujours se remettre en question pas comme le prof de Physique qui lui, depuis 50 ans, sa formule E = mC² marche toujours au plus grand malheur des étudiants.

Je crois qu'après votre recherche, nous sommes prêt à démarrer.
Cliffy, le chef de projet de Gears of Wars n'a qu'à bien se tenir !!
par DigitalGuru - AnalogGuru publié dans : [Tuto] XNA
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
Jeudi 8 mars 2007

Alors lui c'est le genie (geek en anglais), bon je ne vous le présentes pas tout le monde le connait. Il se nomme Mr Bill Gates, le CEO de Microsoft Corporation et aussi l'un des hommes les plus riches de la terre. Il a commencé comme vous et moi en tant que programmeur par passion et puis avec son génie a fait de très grandes choses.
Juste pour vous dire que l'informatique, c'est une passion qui rapporte gros quand même pas mal d'argent. ;-)
Bon voilà, petit hommage à ce dieu de l'informatique, le Squad-Guru ne pouvait pas commencer ce blog sans la bénédiction de Billou pour qu'il veille sur tous les programmeurs sur la terre comme au ciel.héhé !!
par AnalogGuru publié dans : Rien de space'
ajouter un commentaire commentaires (0)    recommander
Jeudi 8 mars 2007
    Voilà, c'est fait j'ai crée mon blog sur la programmation, et par concéquent aussi sur l'informatique et les mathématiques en général ! Et oui, même si j'en avais marre que des teubés du coding me fassent : "De toute façon, la programmation c'est des maths, et comme je suis nul en maths ba...", et si ! Il faut se résigner a accepter qu'à "haut niveau", la programmation ressemble bien plus à des maths qu'à du coding exempt de toute science ! Biensûr je parle pas du démineur fait en C++/SDL qui ne demande même pas un pet' de trigo, mais de bien d'autre chose, genre Ray tracer, Shaders etc... Mais vous aurrez l'occasion de découvrir nombreux de mes codes par la suite !

Sur ceux, bonne lecture à tous !
par DigitalGuru publié dans : Rien de space'
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
Créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur avec TF1 Network - Signaler un abus