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

Auteur Sujet: Zoost & Zoom : Géometrie, animations et rendu graphique  (Lu 6391 fois)

0 Membres et 1 Invité sur ce sujet

Zinlibs

  • Full Member
  • ***
  • Messages: 127
    • Voir le profil
Zoost & Zoom : Géometrie, animations et rendu graphique
« le: Mai 24, 2012, 02:04:29 pm »
Salut les gens,  :)

Aujourd'hui je vous présente les deux librairies sur lesquelles je travaille depuis quelques temps et qui me tiennent à coeur, ma philosophie étant de totalement séparer et différencier l'aspect géométrique d'objets de leur rendu graphique ou de toute autre utilisation potentielle (tel un moteur physique, que je développe grâce à la première soit dit en passant) :  ;D

La première nommée Zoost qui permet de créer des objets géométrique le plus simplement du monde et de les faire interagir entre eux (et ce totallement indépendamment de la SFML).
Des segments, jusqu'aux triangles, en passant par les courbes (y compris Bezier) et les polygones concaves, vous n'aurez que l’embarras du choix (et j'en rajouterai bientôt).
Vous pouvez bien sûr creer vos propres formes personnalisée grâce à un système à la fois haut et bas niveau.  ;D

La seconde, Zoom, (basée sur SFML 2.0 RC) se concentre sur l'aspect animation et graphismes, permettant grosso modo d'utiliser une géometrie de Zoost et de l'animer comme bon vous semble. Mais ça ne s'arrête pas là car vous pourrez aussi afficher ces géométries et personnaliser le rendu à volonté (taille de chaque point, couleurs des segments, remplissage des formes et j'en passe...). Enfin, est fourni un moteur de lumière basé sur le super travail de Gregouar, qui a été dépoussiéré pour l'occasion. Dans un futur proche et avec son aide, je compte ajouter la gestion du tout nouveau moyen de rendre les ombres 2.5D, ce qui me rend vraiment impatient...  :P

Exemple de création d'un polygone concave et son rendu :

Geom geom = Geom::polygon({{0, 0}, {25, 100}, {40, 100}, {40, 0}, {100, 0}, {100, 100}, {120, 100}, {120, 0}, {180, 0}, {180, 100}, {200, 100}, {200, 0}, {260, 0}, {260, 100}, {275, 100}, {300, 0}, {300, 120}, {240, 120}, {240, 20}, {220, 20}, {220, 120}, {160, 120}, {160, 20}, {140, 20}, {140, 120}, {80, 120}, {80, 20}, {60, 20}, {60, 120}, {0, 120}});
geom.setPosition(130, 200);
geom.scale(1.5, 1.5);

Shape shape(geom);
shape.setFaceColor(Color::SpringGreen);
shape.setLiaisonColor(Color::DarkGreen);
shape.setLiaisonWidth(3);

target.draw(shape);

Exemple d'animation d'un objet via une courbe et une cinétique :

Curve curve = Curve::bezier({767, 410, 1000, 900, 1000, 30, 500, 30, 1, 30, 50, 560, 169, 410}) + Curve({169, 410, 228, 321, 386, 571, 553, 261, 421, 218, 575, 464, 767, 410});
curve.setOrigin(500, 370);

Kinetic kinetic(curve, 400, 0, true); // 400 est la vitesse de parcours de la courbe, 0 signifie qu'un commence du début (toujours inférieur ou égal à 1) et true qu'on boucle la cinétique.

// Boucle principale :

Vector2d coords = curve.convertToGlobal(kinetic.update(clock.restart())); // Nouveau point de parcours de la courbe.
myShape.setPosition(coords);

Voilà, ces deux librairies sont pas tout à fait complètes, mais amenées à évoluer rapidement (vu que j'en ai besoin dans mes futurs projets). Je vous tiens au courant des évolution et reste à votre écoute pour toute question ou suggestion !  ::)

https://github.com/Zinlibs/Zoost
https://github.com/Zinlibs/Zoom

Merci et bon codage !
« Modifié: Mai 28, 2012, 01:06:33 am par Zinlibs »
Zoost & Zoom libraries : An easy way to create and handle geometric objets, animate and use them for better graphics !

kamui

  • Sr. Member
  • ****
  • Messages: 291
    • Voir le profil
Re : Zoost & Zoom : Géometrie, animations et rendu graphique
« Réponse #1 le: Mai 24, 2012, 08:46:57 pm »
salut Zinlibs ^^

super travail (mais je le connaissais déjà personnellement). Si j'interviens en plus de le faire pour te féliciter, c'est pour dire que je jubile d'avance de l'intégration du moteur de lumière ;)

Cependant, mais tu verras ça avec Gregouar, et je pourrais vous donner un coup de main pour ça si t'as besoin, il se pourrait qu'il faille bidouiller le concept pour réduire les coûts en performance du nouveau moteur de Gregouar, si c'est possible bien sûr.

encore bravo ++

lezebulon

  • Full Member
  • ***
  • Messages: 235
    • Voir le profil
Re : Zoost & Zoom : Géometrie, animations et rendu graphique
« Réponse #2 le: Mai 24, 2012, 11:34:09 pm »
Salut,
 Point Kinetic::update(sf::Time timeStep)
 {
    if( m_current < 1 )
        m_current+=(m_speed * double(timeStep.asSeconds()) / m_curve.getLength());

    if( m_current > 1 )
        if( m_isRepeatable )
            m_current-=1;
        else m_current = 1;

   return m_curve[m_current];
}

Là t'as un bug si m_current > 2:
genre tu as  m_current = 2.5, tu finis par faire return m_curve[1.5]; qui se retrouve cappé à 1, alors que en théorie tu veux 0.5
bref au lieu de faire  m_current-=1;, faut prendre la partie décimale de m_current

J'ai pas lu tout le code par contre :)
   

Zinlibs

  • Full Member
  • ***
  • Messages: 127
    • Voir le profil
Re : Zoost & Zoom : Géometrie, animations et rendu graphique
« Réponse #3 le: Mai 25, 2012, 01:17:45 am »
Je vois ce que tu veux dire. Je ne pense pas qu'il s'agisse d'une erreur dans le code, mais plutôt d'une divergence conceptuelle. En effet, de mon point de vue m_current est un rapport entre la distance parcourue à un temps donné sur la distance totale à parcourir sur la courbe. Ce rapport ayant un dénominateur à la valeur supérieure ou égale a celle du numérateur, le résultat appartiendra forcément à l'intervale [0;1]. Je ne sais pas quoi penser d'une valeur hors limite, si c'est utile ou intéressant conceptuellement, d'ailleurs je n'y ai jamais pensé.

En tout cas merci de te pencher sur le code, tout n'est pas fini ni parfaitement au point, ça m'aide à l'améliorer !
Zoost & Zoom libraries : An easy way to create and handle geometric objets, animate and use them for better graphics !

lezebulon

  • Full Member
  • ***
  • Messages: 235
    • Voir le profil
Re : Zoost & Zoom : Géometrie, animations et rendu graphique
« Réponse #4 le: Mai 25, 2012, 01:25:09 am »
Non mais tu peux très bien te retrouver à m_current = 2.5 après appeller m_current+=(m_speed * double(timeStep.asSeconds()) / m_curve.getLength()); (pour peu que ton FPS soit pourri)
tu coup tu te retrouves au final à accéder au dernier point de ta courbe (indice 1) alors que si ton truc boucle tu devrais être à l'indice 0.5

Zinlibs

  • Full Member
  • ***
  • Messages: 127
    • Voir le profil
Re : Zoost & Zoom : Géometrie, animations et rendu graphique
« Réponse #5 le: Mai 25, 2012, 01:30:34 am »
T'as raison, j'avais pas imaginé la baisse de FPS... Même si le problème va finir par se régler au bout de quelques frames, ça va geler sur le même point bêtement. Je vais utiliser ton astuce, merci !
« Modifié: Mai 25, 2012, 01:47:43 am par Zinlibs »
Zoost & Zoom libraries : An easy way to create and handle geometric objets, animate and use them for better graphics !

Zinlibs

  • Full Member
  • ***
  • Messages: 127
    • Voir le profil
Re : Zoost & Zoom : Géometrie, animations et rendu graphique
« Réponse #6 le: Mai 28, 2012, 01:10:14 am »
Grosse mise à jour, avec correction de bugs en tous genres et synchronisation de Shape avec son Geom associé lorsqu'un Vertex, une Liaison ou une Face est ajouté(e) ou supprimé(e) de Geom. Ainsi les propriétés associés de Shape sont également ajoutées (avec les propriétés par défaut) ou supprimées. Les propriétés peuvent par la suite être personnalisées individuellement. Cela permet de créer des formes vraiment personnalisés et qui sont automatiquement mise à jour lors de la modification de la géométrie qui les sous tend.
« Modifié: Juin 08, 2012, 05:19:20 pm par Zinlibs »
Zoost & Zoom libraries : An easy way to create and handle geometric objets, animate and use them for better graphics !

Zinlibs

  • Full Member
  • ***
  • Messages: 127
    • Voir le profil
Re : Zoost & Zoom : Géometrie, animations et rendu graphique
« Réponse #7 le: Juin 09, 2012, 07:59:52 pm »
Plop,

Voici la listes des récentes modifications :

Zoost :

- Ajout des commentaires manquants de déclaration de fonctions
- Ajout de fonctions de conversion d'angles (radian / degrés)
- Ajout d'une méthode onTransformUpdated à la classe  Geom::Observer

Zoom :

- Utilisation exclusive de sf::VertexArray pour le rendu
- Sauvegarde du rendu, qui n'est donc plus recréé à chaque appel de Draw
- Simplification et amélioration des exemples

Zoom gagne donc en rapidité avec l'utilisation des Vertex Arrays et la sauvegarde du rendu (qui est mis à jour uniquement lorsque nécessaire).
La prochaine grosse modification sera l'utilisation des transformations de Draw afin de dessiner uniquement à partir des coordonnées locales, ce qui améliorera encore plus les performances.
Edit : Voilà c'est fait !  :D

Et concernant le moteur de lumière, je n'en parle pas beaucoup pour l'instant car j'ai un bogue très pénalisant à corriger (lorsque qu'une lumière subit une rotation en fait) et dont j'ai le plus grand mal à en déterminer la cause.
« Modifié: Juin 10, 2012, 02:06:38 pm par Zinlibs »
Zoost & Zoom libraries : An easy way to create and handle geometric objets, animate and use them for better graphics !

Zinlibs

  • Full Member
  • ***
  • Messages: 127
    • Voir le profil
Re : Zoost & Zoom : Géometrie, animations et rendu graphique
« Réponse #8 le: Juillet 07, 2012, 06:06:39 pm »
Salut,

Je vous annonce une bonne nouvelle puisque je viens d'inclure le moteur de lumière 2.5D de Gregouar dans Zoom ! Bien sûr, c'est juste un premier essai, et je vais m'efforcer de simplifier tout ça (le main est beaucoup trop technique) avec une nouvelle classe (un peu comme mon lightEngine) et tenir à jour en fonction des avancements de Gregouar.

Je vous tiens au courant ! :)

PS : Documentation ajoutée sur le wiki.
« Modifié: Juillet 07, 2012, 06:16:39 pm par Zinlibs »
Zoost & Zoom libraries : An easy way to create and handle geometric objets, animate and use them for better graphics !