Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Je suis tombé sur un os en C, quelqu'un peut m'aider?
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Je suis tombé sur un os en C, quelqu'un peut m'aider?

Posté le 13/08/2012 18:09

je voulais faire une fonction qui trace des lignes sur l'écran (comme Bdisp_DrawLine_VRAM() )

voila le code:

void Ligne(int x1, int y1, int x2, int y2, char couleur)
{
    int i,x,y;

    if(x1>x2)
    {
        i=x1;
        x1=x2;
        x2=i;
    }

    if(y1>y2)
    {
        i=y1;
        y1=y2;
        y2=i;
    }

    switch(2*(x1==x2)-(y1==y2))
    {
        case 0:    switch((x2-x1)<(y2-y1))
                {
                    case 1: for(x=x1;x<=x2;x++) Pixel(x,y1+x*((y2-y1)/(x2-x1)),couleur);
                    break;

                    case 0: for(y=y1;y<=y2;y++) Pixel(x1+y*((x2-x1)/(y2-y1)),y,couleur);
                    break;
                }
        break;

        case 1 : Pixel(x1,y1,couleur);
        break;

        case 2 : for(y=y1;y<=y2;y++) Pixel(x1,y,couleur);
        break;

        case -1 : for(x=x1;x<=x2;x++) Pixel(x,y1,couleur);
        break;
    }
}


et bref, sa marche pas. Quand je l'ai copié dans un programme en basic (en modifiant le moins possible) sa marchait, j'aimerais savoir pourquoi.

PS: void Pixel( int x, int y, char couleur) est une fonction que j'ai mis au point pour modifier un pixel de la VRAM.


Binary_man Hors ligne Ancien rédacteur Points: 1344 Défis: 19 Message

Citer : Posté le 14/08/2012 20:01 | #


Peut être que les fonctions n'ont pas le même rôle, c'est pour ça que celle de pierrot doit être plus lente.
Calculettes : Graph 75, Graph 95, classpad 330 et FX-CG20 !!
Pierrotll Hors ligne Ancien administrateur Points: 5488 Défis: 41 Message

Citer : Posté le 14/08/2012 21:17 | #


@Limachi : Les opérations sur flottants sont encore plus lentes que les divisions d'entiers
ML_line est simplement une implémentation de l'algorithme de Bresenham (tout comme ML_circle et ML_ellipse).

@Ziqumu : Ta fonction est incroyablement longue. Tu gères 12 cas différents ?? Avec Bresenham il n'y en a que 2, dx<dy et dx>=dy

Ajouté le 14/08/2012 à 21:21 :
Par rapport à ML_filled_polygon, c\'est un algo perso conçu pour gérer les polygones concaves, et effectivement je n\'en suis pas très fier. Je compte justement faire des tests pour voir si un algo de triangulation de polygone couplé à un dessin de triangle plein ne serait pas plus efficace.
Ziqumu Hors ligne Membre d'honneur Points: 3055 Défis: 9 Message

Citer : Posté le 14/08/2012 21:35 | #


Bah en fait pour tout te dire cette fonction je l'ai écris y'a longtemps donc je sais plus vraiment comment elle fonctionne mais c'est le code qui est sur wikipedia que j'ai traduit en C++ je me rappel même plus si je l'avais compris à la base.. Mais ca avais l'avantage de marcher au moins (j'avais galéré a trouver un truc qui marche alors quand ca a fonctionné, j'ai pas chercher a le reduire je pense)
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 15/08/2012 00:15 | #


@Pierotll: pardon, avant de te critiquer, j'ai oublié de tester sur des polygones concaves (avec des angles de sommet supérieur a 180°) et effectivement, la rapidité vient du fait que la fonction fill que j'utilise ne gère que les polygones convexes (avec des angles de sommet inférieur a 180°), je m'excuse donc platement.

Ajouté le 15/08/2012 à 01:39 :
Quelqu\'un aurait une fonction pour calculer le FPS?
Je suis nul en utilisation de timers.
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 15/08/2012 01:42 | #


Va voir dans les sources de mon Métro Sibéria, la fonction se trouve dans time.c si j'ai bonne mémoire
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 15/08/2012 02:05 | #


merci

Ajouté le 15/08/2012 à 02:31 :
je viens d\'aller voir, je pense que je vais le refaire a ma méthode, un time_getTicks(); ne me seras pas utile tout seul

Ajouté le 15/08/2012 à 02:46 :
ok, c\'est bon, j\'ai réussi a en faire une correcte.
(record fps sur un cube, en rotation, et avec certaines faces complètement noires: 25 fps)

Ajouté le 15/08/2012 à 02:59 :
avec overcloking, je monte a 100 fps lorsque le cube est statique, 60 fps quand il est en mouvement, 80 fps quand j\'affiche les faces noires et 50 fps si il y a les faces noires et le mouvement en même temps
(bref, la fonction fill prend presque 4x moins de temps que la rotation des points)
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Dark storm En ligne Labélisateur Points: 11634 Défis: 176 Message

Citer : Posté le 15/08/2012 23:02 | #


Ah, oui, pour la fonction, j'ai oublié de préciser que la partie à insérer dans la boucle principale est justement dans celle-ci (moteur.c je crois, vers la fin)
Mais le truc est vraiment tout simple, si ce que tu as fait marche, c'est bien le principal
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 15/08/2012 23:08 | #


oui, sa marche, c'est aussi précis qu'une orloge, par contre j'ai été un peux surpris par le nombre de ticks valant une seconde (il faut 128 tick pour une seconde)
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Binary_man Hors ligne Ancien rédacteur Points: 1344 Défis: 19 Message

Citer : Posté le 16/08/2012 00:56 | #


Je trouve ça pas choquant.
Calculettes : Graph 75, Graph 95, classpad 330 et FX-CG20 !!
Limachi Hors ligne Youtuber Points: 2798 Défis: 67 Message

Citer : Posté le 16/08/2012 00:59 | #


sans doute car 128 c'est 2^7 ?
Mes Programmes
Cliquer pour enrouler
-en basic: un programme nommé PICFMLIM convertissant une picture en code basic.
-en C:
-Un pong.
-Un projet en pause. Je compte le reprendre de temps en temps: Summer Cursed


-mon tuto sur les Str


Mes calto: G25+, G75
Mon minecraft en dévelopement


Projets et Programmes que je soutiens (sur une idée de Marmotti)
Cliquer pour enrouler
-Pokemon Jade de Dodormeur
-Portal2D de JavierXD
-CalCraft de Wime
-GeekBros du groupe GeekBrothers (Eiyeron,Siapran,KevKevVTT,Adbook,LIMachi)
Louloux Hors ligne Ancien administrateur Points: 7035 Défis: 61 Message

Citer : Posté le 16/08/2012 09:18 | #


C''est une des puissances de 2 que tu retrouves partout en info.

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 72 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd