ANIMATIONS [SCANLINE + ALGÈBRE]

John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009 - 25 janv. 2009 à 00:03
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 26 janv. 2009 à 20:16
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49073-animations-scanline-algebre

Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
26 janv. 2009 à 20:16
Je te conseille de regarder du côté de GLScene...
Utilisateur anonyme
26 janv. 2009 à 20:15
@Nicolas___ : MDR

dans ce cas la gain est minime(si gain il y a) par contre la probabilité d'une erreur de saisie est importante.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 20:09
Attends : je ressors mon unité de projection 3D => 2D. Je ne l'ai jamais finie, je n'ai pas pu gérer les angles de la caméra.

*Bouhouhouhouh*

Probablement un cube en 3D home-made avec des faces dégradées la prochaine fois ?

Cordialement, Bacterius !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 20:06
Oui et non...

Si tu veux réutiliser ton code, passes par des ScanLines...Tu pourras ajouter des effets plus tard...et pourquoi pas la 3D ?
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 20:03
Je viens de me poser une question qui m'a brisé : ça ne serait pas plus rapide en utilisant Ellipse et LineTo des canevas ?

x(

Cordialement, Bacterius !
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
26 janv. 2009 à 19:56
Re Nico. lol

Moi, j'aurais laissé les tables trigonométriques en constante. J'ai pas testé, mais je crois que c'est plus rapide.
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
26 janv. 2009 à 19:22
Poser un commentaire sur un source de bacterius, c'est encore pire que d'être spammé !
y'en a encore plus par heure !!!
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
26 janv. 2009 à 19:21
:)))

BLUEPERFECT a raison pour la palette, en tout cas! La palette est le secret de ce genre d'animation je pense. Les perfs s'envolent !
Contrairement à ce que croient les novices, la palette ne limite pas la profondeur des couleurs affichées, mais seulement le nombre de couleurs affichées simultanément. Ce qui n'est pas gênant ici.
Autre avantage: tu peux obtenir des effets très intéressants et très rapides en ne travaillant que sur la palette ("palette-animation", in english).

Mais bon! Palette + threads, c'est pour les "pro", je crois. Mais c'est tj bon de savoir que ça existe.
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 19:16
Raciste...lol
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 19:15
C'est quand-même une instruction pascal BluePerfect ...

Cordialement, Bacterius !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 19:14
Difficile à optimiser pour les Single...Je te renvoie à Google...ou aux newsgroup de CodeGear...
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 19:13
while X >= Scale do System.Dec(X, Scale);
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 19:08
Et si j'ai 64 animations différentes ? 64 threads ! Tu vois, tout a des limites. Mais eventuellement, si je voulais m'arrêter à 5 ou 6 animations, ouais.

Juste une question : quelle est le plus rapide (renvoient tous les deux 0 avec un GetTickCount, trop rapide) :

-- Version ASM --

function TMainForm.ScaleTo(X: Integer; Scale: Integer): Integer; // Replacement de X dans Scale (opérandes entiers)
begin
while X >= Scale do
asm
MOV EAX, X;
SUB EAX, SCALE; // ASM pour aller + vite
MOV X, EAX;
end; // On diminue X jusqu'à ce qu'il soit dans 0..Scale
Result := X; // On donne ça au résultat
end;

-- Version Pascal --

function TMainForm.ScaleTo(X: Integer; Scale: Integer): Integer; // Replacement de X dans Scale (opérandes entiers)
begin
while X >= Scale do X := X - Scale;
// On diminue X jusqu'à ce qu'il soit dans 0..Scale
Result := X; // On donne ça au résultat
end;
______________________

Et pareil pour le type Single à la place d'Integer ?
Je précise que j'ai souffert pour convertir une soustraction pascal en ASM, alors pitié ne m'achevez pas :'/
D'ailleurs il faut que je m'y mette, à l'ASM, c'est essentiel.

Cordialement, Bacterius !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 19:05
* Parce que chaque propriété devrait être un objet en elle-même...
* Parce que chaque objet, maintenant que leur modalité est précisée, devrait posséder son propre espace mémoire et d'éxécution pour ses propres traitements
* Parce que Synchronize existe pour quelquechose
* Parce que jouer sur 32 bits parce que c'est plus rapide ne devrait pas être la justification d'une lenteur de traitement global
* Parce que DirectX fais mieux que ça en version 0.9beta...
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 19:00
Parce que quoi ?
Précise ta pensée !

Cordialement, Bacterius !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 18:34
Parce que....
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 18:33
Pourquoi 1 par objet animé ?

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 18:32
A mon avis 360 bitmaps 32 bits de taille 128x128 à 512x512 prennent un peu plus que 128 Ko de mémoire ...
Je travaille en 32 bits, c'est plus rapide qu'en 24 bits pour le CPU.

Cordialement, Bacterius !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 18:29
Les animations aléatoires :

faut absolument jouer avec les threads...

Actuellement tu utilises 1 thread...

Dans l'absolu, il en faut un par objet animé !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 18:28
tssssssssssss ..
Fini les 128Ko de mémoire....
Et puis tu utilises combien de couleurs ?
Tu peux jouer avec la palette...
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 18:27
Seul petit hic : dès que je veux faire des animations aléatoires, pouff ton optimisation tombe à l'eau ...

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 18:25
Ben quand je dis que tes commentaires sont toujours plein de mystère, c'est que tu ne précises pas beaucoup ta pensée, notamment dans ce message :

"Sinon, dans le genre optimisation, si tes rotations sont cycliques, tu peux mettre tout ça en cache, même les TBitmap..."

Mais je viens de comprendre.
C'est une bonne idée, mais côté mémoire ça va pomper ! 360 TBitmaps en mémoire, argh.

Cordialement, Bacterius !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 18:17
Et mes réponses ?
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
26 janv. 2009 à 17:51
@Caribensila : je n'ai que survolé les commentaires (trop d'asm pour moi !), mais je vais y jeter un coup d'oeil plus en profondeur. D'ailleurs, je ne suis jamais arrivé au bout des commentaires (trop long ... !).

@Blueperfect : tes commentaires sont toujours plein de mystère ...

@Débiars : interessants résultats ... il faut que j'en finisse avec ces violations d'accès (l'opération de pointeur incorrecte, je croyais l'avoir virée !).

Et où puis-je télécharger un profiler ?
Ou bien dois-je me commander un Do-It-Yourself ?
Je demande à mon ami Google :)

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
26 janv. 2009 à 13:29
@Bacterius:
un test avec un profiler te permettrait d'y voir plus clair..
avec cet outil, tu aurais la liste de toutes tes méthodes avec le nombre de cycles et aussi le temps consommé.
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
26 janv. 2009 à 10:54
Sinon, dans le genre optimisation, si tes rotations sont cycliques, tu peux mettre tout ça en cache, même les TBitmap...
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
26 janv. 2009 à 09:58
Bien entendu, je voulais écrire concombre, mais comme j'avais mis coccombre, j'ai viré le "c" de trop sans m'apercevoir que ce "c" là était en réalité un "n" travesti. Quel siècle vivons-nous?
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
26 janv. 2009 à 09:53
Mes résultats personnels, à moi tout seul :

128x128 : se plante au lancement dans SetPixel, violation d'adresse...

256x256 : fonctionne bien, mais fait une sinusite à l'arrêt : pointeur invalide...

512x512 : OK, un peu lent, mais est-ce vraiment un problème ??
Qui va piano, va sano !

(Cari, serait-ce le retour du cocombre masqué ? Bretzel liquide !!!)
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
25 janv. 2009 à 22:30
Regarde le commentaire d'acanicio, sur le tuto... Tu gagneras encore un peu/beaucoup.

D'ailleurs, tu devrais lire tous les commentaires de ce tuto. C'est le plus intéressant! :)

(Et t'es bien sûr que c'est pas un concombre déguisé, ton PC?)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 21:44
Oups : "redémarrage de l'ordinateur", pas du concombre. En fait je regardais la tarte au concombre qu'on t'avait offerte pour ton anniv. Francky ^^

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 21:42
Et Francky, moi j'ai la croix ! :/ Essaye de mettre ta fiche en bsSingle plutôt qu'en bsToolWin eventuellement ?
Sinon pour l'optimisation je fais ce que je peux ...
Je me rappelle de son texte dancant à Manchester - dès que je posais son composant sur la fiche, il plantait comme c'est pas possible (100% CPU, plantage total => redémarrage du concombre). Mais je vais voir pour les sinus-cosinus.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 21:40
Ah oui, non en fait c'est le contraire lol.
Il faut rectifier le commentaire, c'est * 1000 arrondi ^^'

Désolé.

Cordialement, Bacterius !
cs_gege58 Messages postés 15 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 25 janvier 2009
25 janv. 2009 à 21:36
Bonsoir, Petite erreur, je crois :

DegSinus[I] := Round(Deg(S) * 1000); // On récupère son sinus degré * 100 arrondi

il faut mettre :

DegSinus[I] := Round(Deg(S) * 100); // On récupère son
sinus degré * 100 arrondi

A+
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
25 janv. 2009 à 21:32
J'ai pas regardé le source mais il y a un méga soucis d'optimisation : en 512*512 c'est vachement lent. Il y a un petit soucis au niveau de la form : la croix de fermeture de l'application n'est pas affichée. Pour la partie Cosinus et Sinus regarde le source de Manchester sur le mémo qui dance.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 20:54
Ok Caribensila, j'ai regardé un petit peu les routines qui sont le plus souvent appelées (des variables entières pour compter le nombre d'appels, puis un rapport à la fin). J'ai remarqué que ScaleTo était appelé plus de 10.000 fois par seconde ! J'ai un petit peu réduit ce nombre, et un tout petit peu optimisé la fonction. J'ai regardé ensuite la 2eme routine la plus appelée - CreateCircle, de pair avec CreateRotatingArcCW - j'ai optimisé tout ça (moins de Round, moins de ScaleTo). Ensuite, j'ai remplacé (dans le Draw), le Canvas.Draw par un BitBlt - plus rapide je crois).

Et ... je me suis inspiré de tes techniques d'optimisation du code avec les tables trigonométriques : j'ai créé 4 tableaux d'entiers (Sinus, Cosinus, DegSinus et DegCosinus), que je remplis dans une boucle au début de l'application.
Sinus et Cosinus contiennent les sinus des angles exprimés en radians. DegSinus et DegCosinus contiennent les sinus et les cosinus [en degrés] des [angles exprimés en radians] (utilisé dans le calcul des points des lignes).
Et evidemment, j'ai tout passé en entiers avec une multiplication puis une division par 1000. (mais je crois que si on le fait avec 1000000, la précision des sinus et des cosinus sera plus importante non ?).

Bon ben voilà, c'est déjà ça de gagné ! (300% de gain de performances, d'après ton tutorial).

Cordialement, Bacterius !
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
25 janv. 2009 à 16:12
+ sérieusement, une application passe le plus clair de sont temps à effectuer les calculs de quelques procedures ou fonctions en nombre limité...
C'est sur ces méthodes que tu dois t'arrêter en priorité pour améliorer les perfs. Elles constituent ce qu'on appelle des goulets d'étranglement...
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
25 janv. 2009 à 16:05
Ben... Un goulet d'étranglement, c'est par exemple un ProcessMessages dans un Thread... ;)
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
25 janv. 2009 à 16:00
désolé..
tu aurais du songer au père Noël..
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
25 janv. 2009 à 15:59
@Bacterius:
pour le PC, tu aurais du songé au père Noël..
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 15:26
Ah ben tiens Caribensila : ton com. m'a donné une idée - j'ai enlevé ProcessMessages du thread, et hop, gain de performances de 75% !

Juste une question : c'est quoi un "goulet d'étranglement" ? Je ne comprends pas très bien.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 15:23
Ah, Caribensila, je vais lire ton message.

(décidément je me fais doubler par tout le monde aujourdhui !).

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 15:22
Tu vas trop vite Nicolas (je parle de ton CPU).
Or, moi j'ai un escargot comparé au tien.
Donc, il faudrait que ... que tu me files ton PC pour quelques temps ... juste le temps de faire marcher le tien (car sur le mien ça marche bien car il est lent).
En fait ton problème vient que tes instructions sont executées tellement vite qu'elles tombent à coup sûr sur une synchronisation du thread - alors à la fermeture, conflit : Synchronisation + Libération du bitmap => Violation d'accès.

Donc, comme je ne peux pas tester dans les conditions de ton PC, je ne peux pas faire grand-chose.
Tu veux pas aller à Carrefour chercher un PC pourri en soldes à 50 euros, vite fait pour tester ? ^^

Cordialement, Bacterius !
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
25 janv. 2009 à 15:19
Un petit conseil :
Pour pouvoir comparer les perfs efficacement, évite les threads ou les ProcessMessages quand tu es en phase d'optimisation. Une simple boucle avec un nombre d'itérations fixe est bien plus pratique pour déceler les goulets d'étranglement.
Et ce ne sera que lorsque tu penseras avoir optimisé au mieux que tu threaderas ton appli...
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
25 janv. 2009 à 15:15
basse qualité et non , ca plante sur cette ligne :
Lines[Y][X].rgbBlue := B; // On définit la composante B

Pourquoi, je ne sais pas ...
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 15:12
Ouais peut-être un conflit.
Mais c'est pas grave, ça marche avec l'autre boîte.
Affaire à suivre quand-même.
Je viens de mettre à jour :)

Au fait Cirec, tu as une idée de pourquoi, quelques fois, mes FPS sur 128x128 atteignent les 350 FPS, et que d'autres fois (sans rien changer au code), on passe à 63 FPS ?
Bizarre non ?

Cordialement, Bacterius !
Utilisateur anonyme
25 janv. 2009 à 15:10
j'ai testé ton code et il fonctionne parfaitement et si ça fonctionne avec "MsgDlgBox" ça veut dire que le problème vient d'ailleurs dans ton code (peut être un conflit entre "Btns" et un autre pointeur) puisque peu importe la méthode utilisée la boite est toujours crée avec "MessageDlgPosHelpEx"
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 15:05
Lol ^^
Oui, je vais bien vérifier sinon je vais encore mettre à jour 20 fois ...

Cordialement, Bacterius !
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
25 janv. 2009 à 14:59
bonjour,
quelle énergie !
ya pas le feu au lac..
prends ton temps Bacterius.
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 14:55
Oui mais il ne démarre qu'après la boîte !
Mais c'est arrangé, j'ai mis plutôt l'autre option (MsgDlgBox), avec les paramètres tout regroupés, et ça marche bien maintenant.
Je vais pas tarder à mettre à jour sur le site.

Cordialement, Bacterius !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
25 janv. 2009 à 14:41
>>car ça marche avec une boîte normale
Oublies pas que t'es dans un thread et qu'il aime pas la manipulation des pointeurs en simultanée !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 14:37
J'ai un problème avec ton unité DialogEx, Cirec. Un gros même.

Alors, avec le MessageDlg classique :

case MessageDlg('Quelle résolution ?' + chr(13) + chr(13)
+ 'Cliquez sur OK pour une résolution de 512x512.' + chr(13)
+ 'Cliquez sur Oui pour une résolution de 256x256.' + chr(13)
+ 'Cliquez sur Non pour une résolution de 128x128.' + chr(13)
+ 'Ne quittez pas la boîte de dialogue.' + chr(13)
, Dialogs.mtConfirmation, [Dialogs.mbOK, Dialogs.mbYes, Dialogs.mbNo], 0) of
mrOK: Res := Point(512, 512);
mrYes: Res := Point(256, 256);
mrNo: Res := Point(128, 128);
end; // On demande pour la résolution d'affichage

C'est moche mais il n'y a pas de problème.

Avec une boîte de dialogue à toi :

New(Btns);
Btns[mbCust1] := '128x128';
Btns[mbCust2] := '256x256';
Btns[mbCust3] := '512x512';

case MessageDlgEx('Choisissez votre résolution', mtInformation, [mbCust1, mbCust2, mbCust3], 0, mbCust1, nil, Btns) of
mrCust1: Res := Point(128, 128);
mrCust2: Res := Point(256, 256);
mrCust3: Res := Point(512, 512);
end;

Dispose(Btns);

C'est beau, mais ça plante dès qu'on quitte cette boîte, sur une affectation de composante dans SetPixel. Bizarre, car ça marche avec une boîte normale et pas avec la tienne ??

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 14:17
Victoire !
En fait l'opération de pointeur incorrecte était générée par la tentative de dessin dans le composant TImage (libéré avant la fiche).
Je dessine sur la fiche et ça marche nikel (ça m'évite même le bidouillage avec le TBitmap temporaire dans le Create).
Maintenant que j'ai éradiqué cette erreur, je vais voir le messagebox personnalisé (j'en ai besoin :x), et j'arrange tous les autres petits trucs.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 14:04
Bravo Blueperfect pour l'idée du timer ! Le résultat est plus fluide, et en plus je passe à 333 FPS en 128x128.
En revanche ... opération de pointeur incorrecte sur toutes les res. ^^' à la fermeture.

Cordialement, Bacterius !
Utilisateur anonyme
25 janv. 2009 à 14:03
ps: j'ai testé tous les modes Haute & Basse résolutions
et je n'ai eu aucun plantage !!!
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 14:02
Arg BluePerfect tu m'as encore téléscopé -_-'

Je prends note pour le timer.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 14:01
Ah Cirec on s'est téléscopé.
Je regarde ton post, j'arrange tout ça et c'est parti.
Donc les tables dynamiques trigonométriques sont plus rapides que les constantes ?

Cordialement, Bacterius !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
25 janv. 2009 à 14:01
Ce qui n'est pas normal dans ton cas, ce n'est pas l'accès à une variable ou à une constante, mais le fait de devoir compter sur cet écart pour arriver à la bonne performance...

D'ailleurs, dans ton code, je ne vois pas ce qui prends autant de temps...

Peut être devrais-tu changer la phase de dessin en suppriment l'appel à draw dans ton thread, et en la plaçant dans un TTimer de ta TForm à 25ms (40 affichages par secondes)...

Cordialement...
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 14:00
Tu veux mes FPS ? (chez moi ça ne plante pas, mais je n'ai pas encore posté le code arrange).
En fait, ton ordi va tellement vite qu'il passe à tous les coups sur un appel à une variable détruite avec le thread ! héhé >-)

Sinon, dites-moi vos FPS ;)

128x128 = 63 FPS (bon hier je faisais du 219 FPS, je ne comprends pas ...).
256x256 = 43 FPS
512x512 = 12 FPS -_-'

Cordialement, Bacterius !
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
25 janv. 2009 à 13:53
Dis , testes chez toi : Basse qualité , réso 128x128 (non)

Ça te fait : Surprise mais je plante :)
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 13:49
Je crois que l'accès à une constante est plus rapide que l'accès à une variable non ?

case MyQuestion of
False: DynArray;
True: Nothing;
end;

^^

Cordialement, Bacterius !
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
25 janv. 2009 à 13:27
Ta table des SInCos, tu peux pas la précalculer dans un DynArray sur OnCreate ?
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 13:24
Parce que ces fonctions nécessitent des calculs importants du CPU, et comme elles ne changent jamais, autant les mettre en constante comme cela, aucun calcul n'est nécessaire. Graçe à ça, tu passes de 12 FPS à plus de 300 FPS. Voilà :)

Cordialement, Bacterius !
fredelem Messages postés 136 Date d'inscription dimanche 29 octobre 2006 Statut Membre Dernière intervention 1 décembre 2022 2
25 janv. 2009 à 13:10
Une question un peu naïve: pourquoi cette table des sinus et cette table des cosinus ? Pourquoi n'avoir pas utilisé les fonctions sin() et cos()
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 13:05
Ah mince Cirec je croyais avoir vu un commentaire de toi avant mon post.
Donc, merci Cirec maintenant ^^, et puis le lien peut servir, je mets en favoris.

Cordialement, Bacterius !
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
25 janv. 2009 à 12:52
@John Dogget, Caribensila et Cirec : Merci oui je vais optimiser tout ça ... online ^^ et je vais voir le tuto (même si je l'ai déjà vu, mais j'ai dû rater un truc dessus).

@Blueperfect : oui mais là j'utilise un tableau de pixels, donc pour dessiner sur le canevas c'est niet. Sinon merci pour le conseil du OnQueryClose, je vais voir ça.

@Nicolas : ouais je vais arranger ça, ca arrive de temps à autres :/

Cordialement, Bacterius !
Nicolas___ Messages postés 992 Date d'inscription jeudi 2 novembre 2000 Statut Membre Dernière intervention 24 avril 2013 1
25 janv. 2009 à 12:14
---------------------------
Animation
---------------------------
Violation d'accès à l'adresse 00401E78 dans le module 'AnimTest.exe'. Ecriture de l'adresse 00E40004.
---------------------------
OK
---------------------------

J'ai ce gentil petit message en quittant ton appli en 512x512 ...
Pas encore regardé le code ...
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
25 janv. 2009 à 03:02
En ce qui concerne ton appli, j'ai eu un plantage en sortie du programme, dû à une éxécution de Synchronize, alors que ton programme en était à FormDestroy....

Quand tu utilises un TThread, il faut le libérer sur OnQueryClose...sinon, il tourne sur des TCanvas qui sont libérés...
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
25 janv. 2009 à 02:58
Les gradients sont une nouveauté de Windows XP... Une API leur est dédiée...faies une tour sur google...

Sinon le mieux est de les programmer soi-même :
Ce sont des variations du spectre lumineux basées sur 1 ou plusieurs couleurs...

A votre disposition pour étudier, et/ou améliorer un TPersistent de mon crû,que j'ai nommé TSpectre.... C'est une TStringList de TColor (ColorToString) et un éditeur de propriétés...et une collection de procédures de tracé de lignes/Cercles où l'on trace ces figures en ajoutant en paramètre un tableau de TColor, et une collection de fonctions de gestion des couleurs incluant :

* pour 1 couleur, on demande n valeurs TColor, deš% sombre à % clair, et on renvoie le tableau de TColors correspondant...

* pour plusieurs couleurs, on demande n valeurs TColors comprises entre l'étalonnage de TColors passé en paramètre...

Concrêtement :

DrawGradientLine( MyBitmap.Canvas,
Point(10,10), Point(100,10),
[ clRed, clGreen, clYellow ]
);

permets de tracer une ligne horizontale dont les couleurs varient du rouge au jaune, en passant par le vert...
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
25 janv. 2009 à 02:07
... Je ne note pas encore car j'ai remarqué que tu finissais tes sources on-line ;)
blueperfect Messages postés 234 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 21 novembre 2013
25 janv. 2009 à 00:51
>>John
DirectX c'est pas de la programmation, c'est de l'utilisation excessive de termes ésothériques malencontreusement non alignables, réservé aux élève de MathSpé...

>>Bactérius
Bonne idéee...je vais lire ça...Pour le tracé des lignes, j'ai idée que faire des gradients t'inspirerait...
John Dogget Messages postés 384 Date d'inscription vendredi 18 juin 2004 Statut Membre Dernière intervention 7 mai 2009
25 janv. 2009 à 00:03
Avec DirectX, on atteindrait facilement les 500 FPS, mais çà je suppose que tous le monde le sait déjà :p

En tout cas, le code est archi-commenté, bravo => 7/10
Rejoignez-nous