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

Auteur Sujet: Deformation d'images avec vertexArrays  (Lu 5329 fois)

0 Membres et 1 Invité sur ce sujet

flo flo

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
Deformation d'images avec vertexArrays
« le: Mai 06, 2016, 10:05:49 pm »
Bonjour bonsoir ! Je vous remercie par avance pour les réponses que vous pourrez m'apporter ici ! Merci de prendre de votre temps pour me dépanner :)

Alors voilà j'utilise la SFML 2 et j'ai un problème je souhaite utiliser une image avec des vertexarray pour ensuite modifier la position des vertexarray et "étirer" l'image pour essayer de créer un effet de perspective, voici mon code :


#include <iostream>
#include <SFML/Graphics.hpp>
 
sf::RenderWindow app;
 
int main()
{
    app.create(sf::VideoMode(900, 675, 32), "Titre fenetre", sf::Style::Close);
 
    sf::Texture plancherTexture;
    plancherTexture.loadFromFile("plancher.png");
 
    sf::VertexArray points(sf::Quads, 4);
 
    points[0].position = sf::Vector2f(0, 0);
    points[1].position = sf::Vector2f(900, 0);
    points[2].position = sf::Vector2f(900, 675);
    points[3].position = sf::Vector2f(0, 675);
 
    points[0].texCoords = sf::Vector2f(0, 0);
    points[1].texCoords = sf::Vector2f(900, 0);
    points[2].texCoords = sf::Vector2f(900, 675);
    points[3].texCoords = sf::Vector2f(0, 675);
 
    sf::Clock time;
    while(app.isOpen())
    {
        sf::Event event;
        while(app.pollEvent(event))
        {
            if(event.type == sf::Event::Closed)
                app.close();
        }
        if(time.getElapsedTime().asMilliseconds() > 30)
        {
            points[2].position.x ++;
            points[3].position.x --;
 
            time.restart();
        }
 
        app.clear();
        app.draw(points, &plancherTexture);
        app.display();
    }
    return 0;
}

 


Il est assez basique voici l'image avant le code :

https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/plancher.png

Et voici le résultat après une dizaine de seconde de ma boucle :

https://s3-eu-west-1.amazonaws.com/sdz-upload/prod/upload/Sans%20titre91.bmp

On voit bien ici que la "perpective" que je voulais faire est mal faite car une ligne est nettement tracée et sépare mon image en 2 triangles.

Je pense que cela est du au fait que dans cette librairie les différentes primitives de forme (ici sf::Quads pour moi) sont faites à partir de triangles.

Ma question est la suivante : y a t-il moyen de contourner se problème ? Je vous remercie d'avance pour vos réponses ^^

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Deformation d'images avec vertexArrays
« Réponse #1 le: Mai 07, 2016, 08:21:18 am »
Non. Ce qui corrige ce "problème" est habituellement la correction de perspective, via les composantes Z et W des points, mais comme SFML travaille en 2D, il n'y en n'a pas.

Ce que tu peux essayer :
- subdiviser ton quad en plein de petits carrés
- utiliser sf::ConvexShape
- gérer la correction de perspective via un shader ?
Laurent Gomila - SFML developer

flo flo

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
Re : Deformation d'images avec vertexArrays
« Réponse #2 le: Mai 08, 2016, 03:57:05 pm »
Je ne sais pas faire de shader et découper en plusieurs carrés me semble un peu lourd, mais je vais essayer immédiatement avec les convexShape, je ne savais pas que l'on pouvait, comme pour les vertex, agir sur chaque sommet du convexShape, je ne savais pas non plus que l'on pouvait utiliser une texture avec un convexShape, c'est très bon à savoir !

Merci beaucoup pour cette idée !

flo flo

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
Re : Deformation d'images avec vertexArrays
« Réponse #3 le: Mai 08, 2016, 04:10:55 pm »
Voilà c'est merci beaucoup il n'y a plus le "découpage en triangle" néanmoins il reste un problème, lorsque je modifie la position d'un point les autres bougent aussi, je ne comprend pas pourquoi mais résultat plus d'effets de perspective les points bouge de façon a compenser cet effet.

flo flo

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
Re : Deformation d'images avec vertexArrays
« Réponse #4 le: Mai 08, 2016, 04:13:11 pm »
C'est comme si les points de la forme se positionne de sorte à ce que la texture ne sois jamais déformée !

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Deformation d'images avec vertexArrays
« Réponse #5 le: Mai 08, 2016, 07:20:39 pm »
Les points ne bougent pas, mais en effet les coordonnées de texture se réajustent pour que la texture ne soit jamais déformée. Du coup c'est pas terrible dans ton cas ;D
Laurent Gomila - SFML developer

flo flo

  • Newbie
  • *
  • Messages: 5
    • Voir le profil
    • E-mail
Re : Deformation d'images avec vertexArrays
« Réponse #6 le: Mai 13, 2016, 11:48:21 am »
Oui effectivement  :D

Sinon pour ce qui est de la solution avec shader je ne vois pas comment m'y prendre.
Je ne vois pas comment un simple shader peut avoir un effet de "correction de perspective".