Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 9 sur 9
  1. #1
    Membre du Club
    Inscrit en
    mars 2003
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : mars 2003
    Messages : 103
    Points : 40
    Points
    40

    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.

  2. #2
    Membre Expert
    Avatar de Kannagi
    Homme Profil pro
    Développeur Jeux Vidéo
    Inscrit en
    mai 2010
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Jeux Vidéo

    Informations forums :
    Inscription : mai 2010
    Messages : 1 091
    Points : 2 217
    Points
    2 217

    Par défaut

    je ne pense pas que tu te trouveras au bêtisier du forum , ta question n'est pas si bête que ça

    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.

  3. #3
    Membre du Club
    Inscrit en
    mars 2003
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : mars 2003
    Messages : 103
    Points : 40
    Points
    40

    Par défaut

    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.

  4. #4
    Inactif


    Homme Profil pro
    Inscrit en
    novembre 2008
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : novembre 2008
    Messages : 5 308
    Points : 15 141
    Points
    15 141

    Par défaut

    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

  5. #5
    Membre du Club
    Inscrit en
    mars 2003
    Messages
    103
    Détails du profil
    Informations forums :
    Inscription : mars 2003
    Messages : 103
    Points : 40
    Points
    40

    Par défaut

    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.

  6. #6
    Responsable 2D/3D/Jeux

    Avatar de LittleWhite
    Homme Profil pro Alexandre Laurent
    Ingénieur développement logiciels
    Inscrit en
    mai 2008
    Messages
    16 967
    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 : 16 967
    Points : 87 850
    Points
    87 850

    Par défaut

    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.

  7. #7
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    décembre 2006
    Messages
    1 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34

    Informations forums :
    Inscription : décembre 2006
    Messages : 1 637
    Points : 2 010
    Points
    2 010

    Par défaut

    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.

  8. #8
    Expert Confirmé Sénior Avatar de DonQuiche
    Inscrit en
    septembre 2010
    Messages
    2 173
    Détails du profil
    Informations forums :
    Inscription : septembre 2010
    Messages : 2 173
    Points : 4 703
    Points
    4 703

    Par défaut

    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é.

  9. #9
    Expert Confirmé Sénior
    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    4 953
    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 953
    Points : 7 133
    Points
    7 133

    Par défaut

    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •