Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > API graphiques
API graphiques Forum d'entraide sur les API et bibliothèques graphiques 2D et 3D
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/03/2012, 12h15   #1
ben53
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 101
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 101
Points : 36
Points : 36
Par défaut Bibliothèque 2D indépendante de la plateforme

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.
ben53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2012, 12h52   #2
Kannagi
Membre émérite
 
Avatar de Kannagi
 
Homme
Inscription : mai 2010
Messages : 510
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mai 2010
Messages : 510
Points : 957
Points : 957
Envoyer un message via MSN à Kannagi
je ne pense pas que tu te trouveras au bêtisier du forum , ta question n'est pas si bête que ça

Citation:
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).
Tu as raison sur ta première partie mais les autres fonction effet ne dépendent pas de plotPixel (si je prend exemple de la SDL).

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.
Kannagi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2012, 13h54   #3
ben53
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 101
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 101
Points : 36
Points : 36
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.
ben53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2012, 14h08   #4
gbdivers
Expert Confirmé Sénior

 
Homme Guillaume Belz
Biochimiste
Inscription : novembre 2008
Messages : 5 294
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Belz
Âge : 37
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Biochimiste
Secteur : Santé

Informations forums :
Inscription : novembre 2008
Messages : 5 294
Points : 19 555
Points : 19 555
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.
gbdivers est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/03/2012, 14h20   #5
ben53
Nouveau Membre du Club
 
Inscription : mars 2003
Messages : 101
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 101
Points : 36
Points : 36
Merci beaucoup pour ces pistes!

Citation:
Envoyé par gbdivers Voir le message
En fait, non, ton hypothèse de départ est fausse.
ah... et je vais me retrouver dans le bêtisier???
__________________
Things working well, no problems. Time to upgrade.
ben53 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2012, 08h19   #6
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 791
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mai 2008
Messages : 10 791
Points : 43 072
Points : 43 072
Bonjour,

Je souhaitais juste rajouter, qu'une bibliothèque de dessin de ce genre, doit au minimum disposer de :
  • la fonction de dessin de pixel (puis, une fonction les lignes, les triangles ...)
  • une fonction pour ouvrir une fenêtre (ou zone de dessin)
Car on peut très bien imaginer un programme qui fait des rendus uniquement dans un fichier image.
__________________
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.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2012, 20h24   #7
nouknouk
Modérateur
 
Avatar de nouknouk
 
Homme
Inscription : décembre 2006
Messages : 1 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32

Informations forums :
Inscription : décembre 2006
Messages : 1 614
Points : 1 784
Points : 1 784
Citation:
Envoyé par gbdivers Voir le message
En fait, non, ton hypothèse de départ est fausse.
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.
nouknouk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2012, 15h32   #8
DonQuiche
Expert Confirmé
 
Avatar de DonQuiche
 
Inscription : septembre 2010
Messages : 1 366
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 1 366
Points : 2 589
Points : 2 589
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é.
DonQuiche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2012, 17h58   #9
Mat.M
Expert Confirmé Sénior
 
Développeur informatique
Inscription : novembre 2006
Messages : 4 453
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : novembre 2006
Messages : 4 453
Points : 5 874
Points : 5 874
Citation:
Envoyé par ben53 Voir le message
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.).
:
Si tu veux dessiner au pixel près Direct X ne sera pas forcément adaptée, peut-être direct2d faut vérifier.
Et je suppose aussi Open GL
Il vaut mieux utiliser une lib comme CxImage
Voulo
Mat.M est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h40.


 
 
 
 
Partenaires

Hébergement Web