-
Texture sur une courbe
Bonjour,
Je suis en train d'essayer de dessiner un réseau routier. J'arrive à tracer mes routes sans problème. J'ai un ensemble d'Objet GeneralPath qui représentent le chemin de ma route. Ce que je voudrais maintenant, c'est réussir a appliquer une texture sur ce chemin pour dessiner mes marquages au sol (des lignes continues ou pointillées).
J'ai d'abord pensé à utiliser la classe TexturePaint mais c'est la forme qui est appliquée sur la texture avec cette approche. Par conséquent, la texture ne suit pas la route et le marquage au sol est toujours dans le même sens que celui de l'image de référence. (je sais pas si je suis clair, mais en gros ca ne marche pas, enfin pas comme je l'ai utilisé en tout cas)
J'ai pensé travailler sur l'objet Stroke en lui définissant la largeur de la route que je veux dessiner et au lieu d'afficher une simple couleur affichier mon image (en la répétant régulièrement jusqu'à la fin de la route). Mais je ne sais pas si c'est possible et si ca l'est je ne vois pas trop comment m'y prendre ...
Si cette 2eme approche n'est pas réalisable je ne vois pas comment résoudre ce problème. Je suis donc ouvert à toutes vos propositions.
Merci d'avance
-
Je ne vois pas de bonnes solutions (simples en tout cas) pour ce pb a part utiliser plusieurs sous-chemins disposant chacun d'une variation/derivation de la texture de base en fonction de l'orientation de la route.
-
J'y avait pensé mais ca pose un probleme dans les virages avec des lignes pointillées. Si le virage est trop serré ca ne va afficher que le début de mon image ==> je vais avoir une ligne continue à ce niveau ou un vide dans le marquage selon que je commence l'image par une ligne blanche ou un espace. Enfin si je ne trouve pas d'autre solution, je pense que je vais utiliser celle-ci.
Sinon, j'avais pensé à une autre approche mais là encore je ne sais pas comment la mettre en place techniquement :
Je pensais prendre mon image, la dupliquer pour créer une image dont la longueur est égale à celle de la route (j'aurai donc l'image de ma route, mais toute droite). Mais ensuite, je ne sais pas s'il est possible de faire un mapping de l'image sur un objet Shape (Area ou autre, peu importe) qui aurait la forme de ma route.
-
Hum nop, je ne crois pas que ca simplierai le pb.
Euh la seule idee qui me vient est d'utilser un PathIterator avec un pas assez petit pour suivre la courbe de la route et de rendre le chemin en dessinant de petits bouts de l'image-route (tile) orientes correctement en fonction du bout de chemin actuel. Mais la encore il faut detecter des cas speciaux pour rendre la route correctement (ex: virage a angle droit, angle trop important laissant appaitre un trou, etc...). Idem pour la detection des carrefours, rond-points, lignes de stop, etc..... pour lesquels tu devras avoir des tiles speciaux.
Pour les courbes (SEG_CUBICTO et SEG_QUADTO) on peut approximer la courbe en plusieurs segments de droite. La classe FlatteningPathIterator peut t'aider je pense.
http://img109.imageshack.us/img109/1...dmockup7xm.png
Quant aux autres endroits ou les bouts de route laissent apparaitre le fond, mais qui ne necessitent pas de tiles particulier... il suffit de peindre la courbe avec un stroke de la largueur de la route avec la bonne couleur ou une texture generique de goudron avant de rendre les tiles par dessus.
http://img232.imageshack.us/img232/4...mockup26je.png
Ca ressemble bien plus a du placage de texture au sens moteur 2D ou 3D dans ce cas qu'a un simple rendu. Cf : SimCity 1 (2D) et Sim City 4 (3D) - mais bon la ils trichent un peu car les routes sont quand meme relativement droites. M'est avis que certains forums de programmation de jeux pourraient t'aider.