• STATISTIQUES
  • Il y a eu un total de 0 membres et 34794 visiteurs sur le site dans les dernières 24h pour un total de 34 794 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [EN] Framework Metasploit
    Le Framework Metasploit est un logiciel gratuit, open source de tests de pénétration développ&ea...
    Vulnérabilités
    [FR] frameip
    le site de partage des connaissances du monde TCPIP
    Protocole
    [EN] Bright Shadows
    JavaScript: 13, Exploit: 27, Crypto: 69, CrackIt: 52, Stegano: 67, Flash: 3, Programming: 16, Java-Applet: 10, Logic: 20...
    Challenges
    [FR] Developpez.net
    Un forum communautaire qui se veut pour les développeurs en générale. Avec presque 500 000 membr...
    Programmation
    [EN] Exploit-db
    Une base de données d'exploits triés par genre (GHDB, Remote, Local, Web, DOS, ShellCode) à ...
    Vulnérabilités
    [EN] Big-Daddy
    Big-Daddy est site internet communautaire avec un effectif diversifié, y compris des artistes, des programmeur...
    Hacking
    [FR] WeChall
    Audio: 3, Coding: 11, Cracking: 9, Crypto: 18, Encoding: 11, Exploit: 44, Forensics: 1, Fun: 6, HTTP: 6, Image: 8, Java:...
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] effet plasma C/SDL
13-09-2013, 20h34
Message : #9
gruik Hors ligne
gouteur de savon
*



Messages : 757
Sujets : 44
Points: 482
Inscription : Oct 2012
RE: [C] effet plasma C/SDL
l'optimisation spéciale -Mat-, tardive mais y'a un SDL_Delay() maintenant Wink

Code DIFF :
--- a/plasma.c  2013-09-13 20:23:06.017363199 +0200
+++ b/plasma.c  2013-09-13 20:23:12.537281232 +0200
@@ -13,6 +13,7 @@
 #define HAUTEUR        500
 #define PI 3.14159265359
 #define STEP 1000
+#define COEF 1000
 
 double distance (unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2) {
        // trigonometrie de ~15/16 ans : calcul de l'hypothenuse
@@ -29,6 +30,11 @@
        double f1, f2, f3, deg = PI/180;
        double *_sin = calloc(360*STEP,sizeof(double)), *_cos = calloc(360*STEP,sizeof(double));
        if (!_sin || !_cos) return -1; // au cas ou malloc se chie dessus, pas la peine d'aller plus loin
+       unsigned int step = 360 * STEP;
+       double *func1 = calloc(LARGEUR*HAUTEUR*16, sizeof(double));
+       double *func2 = calloc(LARGEUR*HAUTEUR*16, sizeof(double));
+       double *func3 = calloc(LARGEUR*HAUTEUR*16, sizeof(double));
+       if (!func1 || !func2 || !func3) return -2;
 
        // on initialise la sdl et le mode gfx
        SDL_Init(SDL_INIT_VIDEO);
@@ -47,6 +53,14 @@
                        ((unsigned char)(192+63*cos(x*0.1*deg)))
                );
        }
+       // precalcul des images en memoire (optimisation)
+       for (x=0; x<LARGEUR*4;x++) {
+               for (y=0;y<HAUTEUR*4;y++) {
+                       func1[y*LARGEUR*4+x] = sin(distance(x, y, LARGEUR*2, HAUTEUR*2) * deg * 0.3);
+                       func2[y*LARGEUR*4+x] = cos(distance(x, y, LARGEUR*2, HAUTEUR*2) * deg * 0.7);
+                       func3[y*LARGEUR*4+x] = cos(distance(x, y, LARGEUR*2, HAUTEUR*2) * deg * 1.1);
+               }
+       }
 
        // la boucle principale
        while (1) {
@@ -60,9 +74,9 @@
                for (y=0;y<HAUTEUR;y++) { // la routine principale, on balaye l'ecran, pour chaque pixel on calcule son index dans la palette
                        for (x=0;x<LARGEUR;x++) {
                                // nos fonctions trigo horribles et consomatrices de cycles
-                               f1 = sin(distance(x, y, LARGEUR + LARGEUR * _sin[(t*2)%(360*STEP)], HAUTEUR + (hhaut * _sin[(t)%(360*STEP)])) * deg * 0.3);
-                               f2 = cos(distance(x, y, LARGEUR + hlarg * _sin[(t*3)%(360*STEP)], HAUTEUR + (HAUTEUR * _cos[(t*4)%(360*STEP)])) * deg * 0.7);
-                               f3 = sin(distance(x, y, LARGEUR + hlarg * _cos[(t)%(360*STEP)], HAUTEUR + (hhaut * _cos[(t*2)%(360*STEP)])) * deg * 1.1);
+                               f1 = func1[((y+(int)(HAUTEUR + hhaut * _sin[t%step]))*(LARGEUR<<2))+(x+(int)(LARGEUR + LARGEUR * _sin[(t<<1)%step]))];
+                               f2 = func2[((y+(int)(HAUTEUR+HAUTEUR*_cos[(t<<2)%step]))*(LARGEUR<<2))+(x+(int)(LARGEUR+hlarg*_sin[(t*3)%step]))];
+                               f3 = func3[((y+(int)(HAUTEUR+hhaut*_cos[(t<<1)%step]))*(LARGEUR<<2))+(x+(int)(LARGEUR+hlarg*_cos[(t)%step]))];
                                // on somme et fait la moyenne des trois fonctions point a point, et on "anime" en ajoutant t, le tout donne l'indice dans la palette de couleurs
                                c = pal[((unsigned char)(512 + 512 * ((f1+f2+f3)/3))+t)%1024];
                                // putpixel
@@ -76,6 +90,7 @@
                t += STEP;
 
                SDL_UpdateRect(screen,0,0,0,0); // on update l'affichage
+               SDL_Delay(20);
        }
 
        // on quitte proprement
 

le pastebin du nouveau code

finalement ça m'aura également permis de me rendre compte, c'était mon premier plasma, et les formules que j'ai choisi si elles donnent un résultat qu'est joli à regarder sont pour autant pas forcément très heureuses, ce serait à refaire il y aurait moyen de choisir plus habilement tous les paramètres pour un résultat tout aussi eye-candy
Avant donc que d'écrire, apprenez à penser.
Selon que notre idée est plus ou moins obscure, l'expression la suit, ou moins nette, ou plus pure.
Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément.
(Nicolas Boileau, L'Art poétique)
+1 (2) -1 (1) Répondre


Messages dans ce sujet
[C] effet plasma C/SDL - par gruik - 07-09-2013, 17h12
RE: [C] effet plasma C/SDL - par Atlas - 07-09-2013, 17h35
RE: [C] effet plasma C/SDL - par -Mat- - 07-09-2013, 19h46
RE: [C] effet plasma C/SDL - par gruik - 07-09-2013, 20h28
RE: [C] effet plasma C/SDL - par Kiwazaru - 08-09-2013, 16h08
RE: [C] effet plasma C/SDL - par sakiir - 09-09-2013, 22h11
RE: [C] effet plasma C/SDL - par Jek0 - 10-09-2013, 09h08
RE: [C] effet plasma C/SDL - par gruik - 10-09-2013, 11h01
RE: [C] effet plasma C/SDL - par gruik - 13-09-2013, 20h34
RE: [C] effet plasma C/SDL - par -Mat- - 14-09-2013, 13h50
RE: [C] effet plasma C/SDL - par gruik - 14-09-2013, 14h07

Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut