Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » Zoom + Rotation avec MonochromeLib !
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

Zoom + Rotation avec MonochromeLib !

Posté le 11/02/2015 22:26

Et voilà je viens d'achever un défi personnel : écrire une fonction pour agrandir ou réduire une image !

Les fonctions sont incorporées dans la libraire de PierrotLL comme toutes les autres que nous connaissons bien.
Il suffit de modifier MonochromeLib.c et MonochromeLib.h par les nouveaux en pièce jointe.

Les prototypes :
void ML_bmp_or_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h);
void ML_bmp_and_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h);
void ML_bmp_xor_zoom(const unsigned char *bmp, int x, int y, int width, int height, float zoom_w, float zoom_h);

void ML_bmp_or_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle);
void ML_bmp_and_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle);
void ML_bmp_xor_rotate(const unsigned char *bmp, int x, int y, int width, int height, int angle);


Explications :
Il suffit de mettre en argument :
- le pointeur du bmp
- la position en x
- la position en y
- la largeur d'origine
- la hauteur d'origine

- le coefficient de zoom en largeur ou l'angle de rotation
- le coefficient de zoom en hauteur

Infos complémentaires :
Les coefficients de zoom sont des flottants compris entre 0 et l'infini
- entre 0 et 1 -> réduction
- plus de 1 -> agrandissement
L'angle est un entier en degrés et dans le sens trigo (anti-horaire)
L'image tourne autour de son centre.

Nouvelle version du zoom 3x plus rapide !

Ajout des rotations

La librairie est toujours libre.

Aussi simple que ça !

Fichier joint


Az Hors ligne Membre de CreativeCalc Points: 537 Défis: 10 Message

Citer : Posté le 01/08/2015 07:25 | #


Salut, Y a-t il un moyen d’obtenir les coordonnés d'un point précis du sprite avant et après rotation (le même pixel)? Pour des collisions par exemple.. En fait je crois savoir mais j'attend de voir une réponse

Ouais question bête... j'ai trouvé
Lephenixnoir Hors ligne Administrateur Points: 21364 Défis: 149 Message

Citer : Posté le 01/08/2015 07:31 | #


Az a écrit :
Salut, Y a-t il un moyen d’obtenir les coordonnés d'un point précis du sprite avant et après rotation (le même pixel)? Pour des collisions par exemple..

Des collisions au pixel test sur des rotations... c'est beau l'innocence...
Az Hors ligne Membre de CreativeCalc Points: 537 Défis: 10 Message

Citer : Posté le 01/08/2015 07:33 | #


j'ai pas parlé de pixel test! J'avoue y avoir pensé mais c'etais pas le choix final
Lephenixnoir Hors ligne Administrateur Points: 21364 Défis: 149 Message

Citer : Posté le 01/08/2015 07:38 | #


Az a écrit :
j'ai pas parlé de pixel test! J'avoue y avoir pensé mais c'etais pas le choix final

Alors qu'est-ce que c'est ? Un rectangle qui contient la version pivotée ? Un simple rectangle pivoté ? Un autre masque alpha ?
Az Hors ligne Membre de CreativeCalc Points: 537 Défis: 10 Message

Citer : Posté le 01/08/2015 07:46 | #


Bah j'ai une piste et il me faut la position exacte des roues pour rester au dessus, mais étant donné que la piste est assez géométrique je n'ai pas besoin de pxl test pour tester si je suis dessus/dessous etc.. Il y a peut être plus simple mais je vois pas...
Lephenixnoir Hors ligne Administrateur Points: 21364 Défis: 149 Message

Citer : Posté le 01/08/2015 07:51 | #


Oh mais t'as pas besoin d'une telle complexité... ^^' Dans le pire des cas tu laisse une hitbox rectangulaire en réduisant un peu sa taille, même à 45 degrés ça ne gênera pas beaucoup !
Az Hors ligne Membre de CreativeCalc Points: 537 Défis: 10 Message

Citer : Posté le 01/08/2015 07:56 | #


Mais que se passe-t il sur une cote? La voiture ne touche pas le sol? Cependant c'est peut être possible mais deux points sont plus facile a gérer non? et pour se rétablir avec la gravité il faut savoir dans quel sens elle penche.
Lephenixnoir Hors ligne Administrateur Points: 21364 Défis: 149 Message

Citer : Posté le 01/08/2015 08:03 | #


Az a écrit :
Mais que se passe-t il sur une cote?

Ah, tu es en vue de côté...

Az a écrit :
La voiture ne touche pas le sol? Cependant c'est peut être possible mais deux points sont plus facile a gérer non? et pour se rétablir avec la gravité il faut savoir dans quel sens elle penche.

Le problème c'est que pour gérer tous les cas c'est plus compliqué que ça : imagine un pic assez court pour que chacune des roues puisse être d'un côté, par exemple.

Je pense que la meilleure manière de gérer ça c'est dévoir en mémoire des portions de pente constantes sur des petites bandes de largeur et de s'en servir pour émuler la gravité et calculer la position des roues.
Az Hors ligne Membre de CreativeCalc Points: 537 Défis: 10 Message

Citer : Posté le 01/08/2015 08:08 | #


Je vais... prendre le temps de comprendre la dernière phrase mais le sol est assez simple et fait de droites assez longues, pas de pics ni de trous si c'est ça qui cloche.
Lephenixnoir Hors ligne Administrateur Points: 21364 Défis: 149 Message

Citer : Posté le 01/08/2015 08:10 | #


Il faut quand même gérer les cas où les deux roues ne sont pas sur des pentes identiques : n'oublie pas que la voiture ne doit pas se déformer si tu gères les deux roues indépendamment
Az Hors ligne Membre de CreativeCalc Points: 537 Défis: 10 Message

Citer : Posté le 01/08/2015 18:23 | #


Bon, mes points tournent dans le sens contraire... comment inverser le sens de rotation?

j'utilise ca:
void CheckWheels(){
    BlackBackWheelX = (CarBlackPosX+10)-8*cos((3.14159265358979323846 / 180) *angle);
    BlackBackWheelY = (CarBlackPosY+3)-8*sin((3.14159265358979323846 / 180) *angle);
    BlackFrontWheelX = (CarBlackPosX+10)+8*cos((3.14159265358979323846 / 180) *angle);
    BlackFrontWheelY = (CarBlackPosY+3)+8*sin((3.14159265358979323846 / 180) *angle);
}


et j'ai essayé M_PI mais ca ne fonctionnais pas
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

Citer : Posté le 01/08/2015 18:28 | #


Alors pas besoin de mettre autant de chiffres Az, une précision au milliardième de radian de sert pas trop 3.14 suffit
Ensuite pour inverser le sens il suffit me mettre -angle
Az Hors ligne Membre de CreativeCalc Points: 537 Défis: 10 Message

Citer : Posté le 01/08/2015 18:30 | #


MERCI! . Youpi ça marche, je vais peut être avoir quelque chose de potable pour les CPC
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

Citer : Posté le 01/08/2015 18:34 | #


De rien, et t'as dû voir, quand t'es proche des 45 degrés d'inclinaison, les images pivotées sont un peu crados. Faudrait que je revois mon algo, en faisant l'inverse : au lieu de pendre un pixel du bitmap et l'afficher à l'écran, il vaut mieux choisir un pixel à l'écran et lui donner la bonne couleur, ça évite les trous :/
Az Hors ligne Membre de CreativeCalc Points: 537 Défis: 10 Message

Citer : Posté le 01/08/2015 18:36 | #


J'ai vu mais franchement c'est deja mieux que tout plein de sprites! Dès que tu aura terminé je vais essayer de l'utiliser dans swing copters.
Lephenixnoir Hors ligne Administrateur Points: 21364 Défis: 149 Message

Citer : Posté le 02/08/2015 23:01 | #


Ninestars a écrit :
Alors pas besoin de mettre autant de chiffres Az, une précision au milliardième de radian de sert pas trop 3.14 suffit

Même en astronomie on n'utilise pas plus de 20 décimales... là il en a mis 20 !
Et puis, ça ne se stocke pas ça, après 9/10 l'information est perdue... x)

Ninestars a écrit :
Faudrait que je revois mon algo, en faisant l'inverse : au lieu de pendre un pixel du bitmap et l'afficher à l'écran, il vaut mieux choisir un pixel à l'écran et lui donner la bonne couleur, ça évite les trous :/

Ça, ça dépend : pour les agrandissements, oui, pour les réductions, c'est pas forcément le bon plan. Après, je ne sais pas pour les homothéties en général mais si tu pouvais avoir une fonction intelligente pour choisir à chaque fois ce serait pas mal !
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

Citer : Posté le 03/08/2015 01:15 | #


Et pourquoi ça ne serait pas le bon plan ? Je ne vois pas de raison à ce que ça se passe mal, ou du moins, moins bien.
Lephenixnoir Hors ligne Administrateur Points: 21364 Défis: 149 Message

Citer : Posté le 03/08/2015 09:49 | #


Ninestars a écrit :
Et pourquoi ça ne serait pas le bon plan ? Je ne vois pas de raison à ce que ça se passe mal, ou du moins, moins bien.

Pour les réductions ? C'est pas assez ressemblant en général. Il manque trop de pixels (enfin, c'est ce que j'ai constaté).
Dark storm Hors ligne Labélisateur Points: 11549 Défis: 176 Message

Citer : Posté le 05/08/2015 23:04 | #


Sympa, je suis de loin, ça peut toujours être utile (MS4 ? )
Sinon, à quand la version avec anti-aliasing en niveaux de gris ? Pour peu que le moteur de Lephe devienne très fonctionnel (à priori j'ai confiance là-dedans), ça peut être cool
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
-florian66- Hors ligne Ancien rédacteur Points: 2370 Défis: 20 Message

Citer : Posté le 06/08/2015 08:39 | #


Vous ne pouvez pas mettre un lien de cette nouvelle lib dans le snippet "MonochromeLib" ?

Ca éviterais de la chercher tous le temps
In Arch, I trust ! And you ?
Ninestars Hors ligne Membre Points: 2449 Défis: 24 Message

Citer : Posté le 06/08/2015 14:26 | #


C'est vrai que l'antialiasing en niveau de gris ça serait pas mal

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 v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 40 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