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

Auteur Sujet: Shapes et texturage  (Lu 2469 fois)

0 Membres et 1 Invité sur ce sujet

Skrool

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Shapes et texturage
« le: Mars 13, 2015, 02:02:22 pm »
Bonjour  :),
j'ai besoin pour mon code de texturer un shape de manière bouclée (comme si j'utilisaissetRepeated(true);). En effet, un shape peut être texturé, mais la texture s'affiche automatiquement en suivant la largeur du shape, du coup, au lieu de reboucler, la texture s'étend  :(

Du coup, j'ai cherché si il n'y avait pas une fonction pour changer la taille affichée d'une texture dans un shape, sans succès. J'ai aussi cherché de voir si on ne pouvait pas se servir du shape comme masque pour une texture ou un sprite, mais je n'ai rien trouvé non plus  :-\

Si quelqu'un a une solution, piste, idée, je vous serais très reconnaissant  :D

mazertys17

  • Full Member
  • ***
  • Messages: 123
    • Voir le profil
    • E-mail
Re : Shapes et texturage
« Réponse #1 le: Mars 13, 2015, 02:15:33 pm »
Salut.

Je ne sais pas exactement ce que tu cherches à faire , mais si c'est ce que je crois  ( une animation ? ) , je te conseillerais d'utiliser des vertex/entité de vertex, avec les sf::TextCoords. Tout est bien expliqué dans le tuto.
« Modifié: Mars 13, 2015, 02:27:40 pm par mazertys17 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Shapes et texturage
« Réponse #2 le: Mars 13, 2015, 02:59:10 pm »
En effet, les formes (sf::Shape) vont toujours étirer leur textureRect sur leur taille réelle. C'est un choix qui a été fait au niveau de l'implémentation. Donc pour contourner cette limitation, il faut te passer de sf::Shape et de ses dérivées, et faire ton propre polygone avec un vertex array.
Laurent Gomila - SFML developer

Skrool

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Shapes et texturage
« Réponse #3 le: Mars 13, 2015, 04:21:46 pm »
D'accord, je vais essayer vertex array. Merci beaucoup  :)

@mazertys17 : non, je ne souhaite pas faire d'animation. Je souhaite créer un petit moteur de jeu qui utilise des polygones comme plateforme, et, pour pouvoir les texturer, j'utilise une texture que je reboucle au centre, ainsi que des boute de texture pour faire les bords. De cette manière, il sera facile de créer des plateformes déformée sans avoir à créer une texture pour chacune. Ce système sera aussi couplé à un système d'affichege de texture simple pour certaines plateformes spéciale plus détaillée  ;)

Skrool

  • Newbie
  • *
  • Messages: 4
    • Voir le profil
Re : Shapes et texturage
« Réponse #4 le: Mars 16, 2015, 10:26:43 pm »
Bon, après plusieurs tests, je trouve en effet les tableaux de Vertexs plus pratiques, notamment pour les déformations d'images, même si les primitive triangleFan et triangleStrip ont leurs limite en ce qui concerne les formes.

Placer une texture en boucle marche lorsque celle-ci est à la taille de la partie que l'on veut boucler (en gros, si on veut boucler une texture tout les 64*64, il faudra que notre texture fasse obligatoirement 64*64). Et là est le problème : utiliser de grande texture comprenant plusieurs fragments de texture que notre programme replace aux bons endroits pour éviter d'avoir trop de textures chargées est incompatible avec ce système de bouclage de texture. En effet, j'ai beau avoir cherché, à pars "loadFromMemory" que je doute qui ait été crée à cette effet, je n'ai pas trouvée de fonction successible de créer une sous texture à partir s'une autre texture et d'un Rect. Si quelqu'un connaitrait une astuce, je suis preneur  :)

Ps : Je n'ai pas eu l'occasion de te le dire, mais merci pour ce framework agréable et simple d'utilisation. Moi qui programmais en SDL avant, j'ai l'impression de passer de la préhistoire au 20e siècle d'un coup !

mazertys17

  • Full Member
  • ***
  • Messages: 123
    • Voir le profil
    • E-mail
Re : Shapes et texturage
« Réponse #5 le: Mars 16, 2015, 10:51:58 pm »
Pourquoi ne pas utiliser texcoords ?

ex :


    _vertex[0].position = sf::Vector2f( x                              , y ) ;
    _vertex[1].position = sf::Vector2f( x + _imageSizeX                , y ) ;
    _vertex[2].position = sf::Vector2f( x + _imageSizeX                , y + _imageSizeY ) ;
    _vertex[3].position = sf::Vector2f( x                              , y + _imageSizeY ) ;

    _vertex[0].texCoords = sf::Vector2f( _counterX  * _imageSizeX                      , _counterY  * _imageSizeY ) ;
    _vertex[1].texCoords = sf::Vector2f( _counterX  * _imageSizeX   + _imageSizeX      , _counterY  * _imageSizeY ) ;
    _vertex[2].texCoords = sf::Vector2f( _counterX  * _imageSizeX   + _imageSizeX      , _counterY  * _imageSizeY +  _imageSizeY ) ;
    _vertex[3].texCoords = sf::Vector2f( _counterX  * _imageSizeX                      , _counterY  * _imageSizeY +  _imageSizeY ) ;

 

si _counterX = 2, tu va a 2 case à droite de ta sprite . Si counterY = 1 , du déscend d'une case etc...


ps :
Citer
j'ai l'impression de passer de la préhistoire au 20e siècle d'un coup !
on en est même au 21ème  ;)
« Modifié: Mars 16, 2015, 11:00:47 pm par mazertys17 »

Laurent

  • Administrator
  • Hero Member
  • *****
  • Messages: 32498
    • Voir le profil
    • SFML's website
    • E-mail
Re : Shapes et texturage
« Réponse #6 le: Mars 16, 2015, 11:10:01 pm »
Citer
Et là est le problème : utiliser de grande texture comprenant plusieurs fragments de texture que notre programme replace aux bons endroits pour éviter d'avoir trop de textures chargées est incompatible avec ce système de bouclage de texture.
La solution est de subdiviser ta géometrie, et du coup de faire la répétition toi-même plutôt que de simplement passer la texture en mode repeat. Là au moins tu auras un contrôle total.
Laurent Gomila - SFML developer

 

anything