|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : mars 2003 Messages : 101 ![]() |
Bonjour à tous,
Je me demande si je ne vais pas me retrouver dans le bêtisier, mais bon... Je suppose (c'est là que mon hypothèse est peut-être si simpliste que je vais me taper la honte) que la base de la base d'une bibliothèque 2d est la fonction qui permet de "peindre" un pixel aux coordonnées données (appelons là plotPixel()). De cette fonction dépendent toutes les autres (dessin de ligne, de formes, blending, etc). Je cherche donc une bibliothèque 2d où cette fonction pourrait être réécrite en fonction de mes besoins, c'est à dire en fonction des paramètres nécessaires au dessin du pixel (tel système de fenêtre et de surface de dessin pour DirectX, tel autre pour openGL, etc.). Autrement dit, ce que je cherche, c'est une implémentation, en C/C++, d'un maximum d'algorithmes de dessin et d'effets 2D, mais indépendante de la plate-forme utilisée dans la mesure où tout dépendrait de plotPixel(). Est-ce que ça existe?
__________________
Things working well, no problems. Time to upgrade. |
|
|
00
|
|
|
#2 | |
|
Membre émérite
![]() |
je ne pense pas que tu te trouveras au bêtisier du forum , ta question n'est pas si bête que ça
Citation:
Si j'ai bien compris tu veux juste une bibliothèque pour les effet 2D indépendante de plotpixel ? Je suis pas sur mais je crois que Cairo ou openCV sont ce que tu cherche. |
|
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : mars 2003 Messages : 101 ![]() |
Merci pour ta réponse.
![]() Cairo peut éventuellement répondre à mon problème (à travers son système d'"image surfaces" qui manipule directement la mémoire si j'ai bien compris), mais il faut que je creuse la question, et à priori, je dirais que la solution est surdimensionnée par rapport à mes besoins. Mais oublions la partie effets, je me suis mal exprimé. Plus précisément, il me faudrait une bibliothèque implémentant des fonctions de dessin (ligne, cercle, polygone, etc.) et de remplissage en couleur unie ou en dégradé (linéaire ou radial). Je suppose que dans ce cas, mon hypothèse de départ sur la fonction "plotPixel()" est fondée. Si vous avez ça je suis preneur!
__________________
Things working well, no problems. Time to upgrade. |
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Guillaume BelzBiochimiste Inscription : novembre 2008 Messages : 5 294 ![]() |
En fait, non, ton hypothèse de départ est fausse.
Comme tu cites DirectX et OpenGL, je suppose que tu connais un peu comment fonctionne un gpu. Lorsque tu lances une instruction de dessin, tu envoies une commande au gpu, ce qui demande un certain temps de latence. Pour dessiner une ligne qui traverse l'écran par exemple, tu auras un appel pour chaque plotPixel() et donc autant de fois la latence. Avec l'antialiasing, tu devras également écrire dans les pixels à côté de la ligne et faire plusieurs milliers d'appels à plotPixel(). Pour une seule ligne... En fait, les gpu travaillent en vectoriel avec des "listes de travail" : on donne la liste des primitives (type = triangle, ligne, etc. la position, la couleur, la transparence, etc.) et les opération que l'on veut faire (transformation, blending, etc.) en une seule fois. La plupart des bibliothèques modernes de dessin utilisent l’accélération matériel et donc cette technique. Sans l'accélération matériel, il est quand même plus rapide de travailler avec des paquets de l'image (utilisation des mémoires tampon, vectorisation SSE) que pixel par pixel. Tu peux regarder du côté de Anti-Grain Geometry, un bibliothèque utilisant la rasterisation (dessin from scratch ; elle est un peu vielle mais son code est très bon) ou le moteur raster de Qt. Je crois qu'il existe une bibliothèque de dessin en C++ Template aussi mais j'ai oublié le nom Tu peux peut être utiliser Qt, qui peut dessiner directement (http://qt-labs.developpez.com/graphi...nce/03-raster/) ou en passant par OpenGL (http://qt-labs.developpez.com/graphi...nce/05-opengl/) et qui propose une fonction drawPoint() (http://qt.developpez.com/doc/4.7/qpainter/#drawpoint). Tu peux également t'amuser à lire la série de tutoriel Qt Graphics et performances pour mieux comprendre les problématiques de graphique
__________________
Merci à toutes les bénévoles avec qui j'ai travaillé sur les rubriques C++, Qt et Jeux. Retrouvez mes anciennes publications sur GitHub et suivez mes futures publications sur Google+. Apprendre Qt 5 : vidéos d'installation (YouTube), extraites du livre Créer des applications avec Qt 5. |
|
10
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : mars 2003 Messages : 101 ![]() |
Merci beaucoup pour ces pistes!
ah... et je vais me retrouver dans le bêtisier??? ![]()
__________________
Things working well, no problems. Time to upgrade. |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() ![]() Alexandre LaurentIngénieur développement logiciels Inscription : mai 2008 Messages : 10 791 ![]() |
Bonjour,
Je souhaitais juste rajouter, qu'une bibliothèque de dessin de ce genre, doit au minimum disposer de :
__________________
Vous souhaitez participer à la rubrique 2D / 3D / Jeux ? Contactez-moi ![]() La rubrique a aussi un blog ! Ma page sur DVP Mon Portfolio Qui connaît l'erreur, connaît la solution. |
|
00
|
|
|
#7 |
![]() ![]() Inscription : décembre 2006 Messages : 1 614 ![]() |
Son hypothèse n'a rien de faux.
Seulement son hypohtèse ne prend pas en compte le fait que souvent la notion de dessin inclut dans ses bagages la notion de performance. Et là oui, si on prend également en compte la notion de performances, de très grandes disparités peuvent exister et c'est ce besoin en performance qui va nous contraindre d'éliminer certaines possibilités inadaptées pour l'usage qu'on veut en faire. On peut prendre un contre-exemple extrême: si on doit dessiner une image et que le fait que ça mette 10 secondes de plus ou de moins importe peu, alors oui, effectivement, la solution de dessiner pixel par pixel est parfaitement envisageable. Si par contre on veut faire des animations à 60 images par seconde, évidemment on ne parle plus de la même chose. Bref, on en revient aux fondamentaux: définir avant tout ton besoin. Et pour ça il faudrait plus de précisions sur ce que tu comptes en faire de ta lib générique. Et une question entraînant l'autre: s'il s'avère que ton besoin implique un impératif en terme de performances (et donc implique qu'il va falloir utiliser les optimisations des plateformes cibles), il va falloir définir quelles plateformes exactement tu veux supporter. My 2 cents.
__________________
Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : septembre 2010 Messages : 1 366 ![]() |
Bonjour.
D'autres que moi ont expliqué pourquoi aucune biblio 2D ne s'appuiera sur une simple fonction "plotpixel". Partant de là, ce qu'il te faut ce n'est pas une biblio dans laquelle tu pourrais réécrire plotpixel mais une biblio capable de dessiner sur une surface mémoire (image/texture) que tu pourrais ensuite envoyer à qui bon te semble. Ce que n'importe quelle biblio 2D doit pouvoir faire, de GDI à Qt en passant par Direct2D et Cairo. Il ne reste plus qu'à en choisir une et Qt est sans doute la meilleure à ce jeu (performances, portabilité, etc). Par contre il peut être difficile d'appeler Dx depuis une fenêtre Qt si celle-ci s'appuie sur OGL pour son rendu, et vice-versa. Tout cela étant dit, les besoins sont à mon avis mal formulés. Pourquoi pouvoir dessiner avec Dx ou OGL est-il important si le rendu est toujours fait en amont ? Est-ce qu'il ne s'agit pas simplement de pouvoir ouvrir une fenêtre et y afficher un rendu 2D sur toutes les plateformes ? Auquel cas Qt est tout indiqué. |
|
|
00
|
|
|
#9 | |
|
Expert Confirmé Sénior
![]() Développeur informatique Inscription : novembre 2006 Messages : 4 453 ![]() |
Citation:
Et je suppose aussi Open GL Il vaut mieux utiliser une lib comme CxImage Voulo |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com