Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Dessiner un diaphragme  (Lu 4769 fois)

0 Membres et 1 Invité sur ce sujet

Armulis

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Dessiner un diaphragme
« le: Juin 15, 2014, 08:35:34 pm »
Salut!

Je suis en train d'essayer de réaliser une animation graphique, et je voudrais faire un diaphragme (ce cercle entouré de noir qui se referme à la fin des dessins animés).

Je pense qu'il faudrait dessiner un rectangle noir et faire un trou dedans.

Créer le rectangle et le cercle, je sais faire. Par-contre, il me faut une fonction pour découper le cercle dans le rectangle.
Avez-vous des propositions? Merci d'avance!

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #1 le: Juin 15, 2014, 09:26:22 pm »
Jette un oeil à cette réponse ainsi qu'à l'exemple donné par exploiter juste après
Je traduis au cas où :
- crée une RenderTexture de la taille de ta fenêtre.
- clear là avec la couleur noire opaque (du noir banal quoi)
- draw un cercle dans une couleur transparence (opacité à 0) avec le mode sf::BlendNone sur la RenderTexture
- draw ta RenderTexture sur ta vraie fenêtre (avec un sprite)

A chaque frame tu fais un cercle plus petit, et voilà t'as ton diaphragme.
PS: quand tu postes une question sur plusieurs forums, précise-le, ça évite aux gens de répondre à une question à laquelle quelqu'un d'autre a déjà répondu ailleurs.
Et qu'est-ce qui ne t'allait pas dans la réponse du mec là ?
« Modifié: Juin 15, 2014, 09:30:05 pm par G. »

Armulis

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #2 le: Juin 15, 2014, 09:48:13 pm »
OK, merci.

Si ta "traduction" est complète, il est où le rectangle noir avec un trou?

D'après ce que j'ai compris, je doit agir sur tous mes objets pour que l'ensemble ait l'air de former un diaphragme. C'est hyper lourd, et je préférerais juste activer le diaphragme et continuer d'animer les autres objets normalement (avant d'arrêter toutes les animations en même temps lorsque le diaphragme sera refermé).

Il faut donc que le diaphragme soit un objet (n rectangle avec un trou) devant les autres objets (sauf ceux qui doivent rester devant).

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #3 le: Juin 15, 2014, 09:58:58 pm »
Le rectangle c'est la RenderTexture
Il est noir car tu la clear avec du noir
Le cercle avec l'opacité à 0 crée le trou dans ton rectangle

Ça change rien à tes autres objets, t'as juste à dessiner ta RenderTexture après avoir dessiné tout le reste comme tu le fais d'habitude.

Et je redemande, qu'est-ce qui ne t'allait pas dans la réponse du mec là qui fait déjà ce que tu demandes ?

Armulis

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #4 le: Juin 15, 2014, 10:03:02 pm »
Ben cette solution-là, justement, modifie apparemment tous mes objets (en les rendant noirs là où ils "seraient" au-dessous du diaphragme). Mais je dois modifier tous les objets (potentiellement des centaines) pour réaliser cette animation, et je suis sûr qu'il existe des solutions plus simples.

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #5 le: Juin 15, 2014, 10:05:40 pm »
Ben ptêtre que tu devrais lire et comprendre les réponses et essayer les codes que les gens te donnent alors. ;)
Car bon là c'est juste créer un rectangle noir avec un trou et le dessiner. Je vois pas en quoi ça touche à tes autres objets. ???

Armulis

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #6 le: Juin 15, 2014, 10:15:25 pm »
Ben je sais pas, alors...

Le truc nommé "Blend" est pas très clairement expliqué dans la documentation, et je pense pas que ce soit utile de faire des tests pour en déduire la fonctionnalité d'un truc qu'on ne connaît pas.

J'avais compris que ce truc allait rendre tous mes autres objets noirs excepté dans le périmètre délimité par le disque blanc. Bon, c'est pas grave, j'essaie...
Non, ça va pas, je comprends pas du tout comment fonctionne ce truc. Mais pourquoi le mec m'écrit un programme? Je voulais juste qu'on me dise quelles fonctions utiliser.
« Modifié: Juin 15, 2014, 10:46:16 pm par Armulis »

Armulis

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #7 le: Septembre 07, 2014, 09:28:24 pm »
Salut, je suis de retour =D

J'ai essayé d'utiliser BlendMultiply, mais ça ne donne pas le résultat attendu.
Je voudrais composer une image en dessinant des sprites, dessiner un rectangle noir par-dessus, et faire un trou rond uniquement dans le rectangle noir.
Si je dessine un cercle en utilisant BlendMUltiply, je fais un trou dans l'image, et ça sert à rien en fait =)

Une idée?

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #8 le: Septembre 07, 2014, 10:06:04 pm »
Toujours pas compris ce qui n'allait pas avec ma première réponse et mon premier lien posté. En l'état je vois pas ce qu'on pourrait te répondre de plus. Donc soit tu es plus précis dans ce que tu n'as pas compris ou qui ne marche pas, soit tu essaies ce qui est dit dans mon premier post (et lien) et si ça ne marche pas tu nous montres ton code.
Car ça fait exactement ce que tu veux et y'a même un code complet de posté...

Armulis

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #9 le: Septembre 08, 2014, 01:52:32 pm »
Salut!
Je suis de retour, toujours sans solution.

J'aimerais faire un trou dans une sprite. Comment faire?

TheKingArthur

  • Invité
Re : Dessiner un diaphragme
« Réponse #10 le: Septembre 08, 2014, 10:18:27 pm »
À la limite si tu n'a plus d'idée tu peut toujours faire un rectangle transparent et lui mettre des bordures noir TRÈS épaisses. Mais ce n'est pas la meilleure solution.

Armulis

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #11 le: Septembre 17, 2014, 07:25:55 pm »
J'ai déjà pensé à cette solution, mais même si elle marche, on est d'accord de dire que c'est de la merde =)

CINEfilHD77

  • Newbie
  • *
  • Messages: 38
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #12 le: Septembre 18, 2014, 12:47:56 am »
T'as l'air d'avoir du mal avec le principe, alors je te donne un code.
Par contre c'est pas du machage de travail en bonne-et-due forme, faudra que tu change certain trucs, mais t'as le code pour le principe au moins, tu peux pas dire que t'y arrives pas.

(Admettons que ta fenêtre fasse 800x600)

sf::RenderTexture diaphragme;
sf::CircleShape cercle(1000);
sf::Sprite diaph_sprite;

diaphragme.create(800, 600);
diaphragme.clear(sf::Color::Black);

cercle.setOutlineThickness(0);
cercle.setFillColor(sf::Color::White);

diaph_sprite.setTexture(diaphragme.getTexture());

// En supposant que ton programme s'arrête quand l'écran devient totalement noir
while(cercle.getRadius() > 1)
{
        diaphragme.clear(sf::Color::Black);
        diaphragme.draw(cercle);
        diaphragme.display();

        cercle.scale(0.99);// Le cercle de visibilité qui rétrécie de plus en plus

        window.clear();

        /*
                Affichage de ton monde
        */


        window.draw(diaph_sprite, sf::BlendMultiply);// Affichage du diaphragme
        window.display();
}
« Modifié: Septembre 18, 2014, 01:17:44 am par CINEfilHD77 »

G.

  • Hero Member
  • *****
  • Messages: 1592
    • Voir le profil
Re : Dessiner un diaphragme
« Réponse #13 le: Septembre 18, 2014, 03:39:59 am »
Non mais on lui a déjà donné le code complet et l'explication pour le faire avec BlendMultiply y'a plus de 3 mois sur le sujet d'openclassroom que j'ai linké dans mon premier post.  ;D
Je lui ai aussi déjà donné un lien vers l'explication et un code complet pour le faire avec BlendNone dans mon premier post. ;D

Mais monsieur n'a même pas essayé, ne répond pas vraiment aux questions et s'en fout. Je pense que c'est un troll, ou autre chose.
 :-X
« Modifié: Septembre 18, 2014, 07:57:50 am par G. »