IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

OpenGL trop lent pour la 2D !!!


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut OpenGL trop lent pour la 2D !!!
    Salut a tous je suis nouveau sur le forum


    cela fait plusieurs jour que je test les fonctions 2D d'opengl (glDrawPixels,
    glCopyPixels,glRasterPos2i,glReadPixels) etc...... ,

    Je suis trés decu des performances 2D d'opengl , afficher des 'tiles'
    est vraiment trop lent .

    Il existe une technique rapide pour afficher des 'tiles' avec les fonctions
    glTexCoord2f et glVertex3f.

    exemple:
    glBindTexture(GL_TEXTURE_2D, textureID[0]);
    glBegin(GL_QUADS);
    glTexCoord2f(0, 0); glVertex3f(1, 0, 0);
    glTexCoord2f(1, 0); glVertex3f(0.5, 0.5, 0);
    glTexCoord2f(1, 1); glVertex3f(0.5, -0.5, 0);
    glTexCoord2f(0, 1); glVertex3f(1, 1, 0);
    glEnd();

    la encore je trouve qu'il y a beaucoups de contraintes et cette tech
    nique est loin d'etre efficace, le code deviens vite assez gros pour pas
    grand chose.

    j'ai passer beaucoup de temps sur google pour essayer de trouver des
    exemples de jeu 2d, scrolling parallax, multi directionnel, horizontal
    vertical,a base de 'tiles', en opengl et vu le peu de resultats j'en conclus
    que OpenGL pour la 2d c'est de la m.......

    Je me rappel de l'époque ou je codais en assembleur sur amiga, en
    quelques lignes je pouvais exprimer toute la puissance du blitter ou du
    copper.

    a l'époque des processeurs aux gigaherz et des API je me dis qu'il y a une certaine régression, on nous laisse de moins en moins la possibilité
    de bidouiller nos puces (pour la compatibilité des programmes ??), on
    est cantonner dans un schéma.

    me reste t'il une seule solution ? . coder toute mes fonctions blitter en C
    ou assembler, les utiliser dans un buffer pour ensuite l'injecter dans la
    carte graphique.

    j'attend vos avis sur les techniques efficaces pour faire de la 2D comme
    au bon vieu temps. que ce sois en assembleur ou en C.

    merci

    p.s : désolé pour les fautes de francais

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    cela fait plusieurs jour que je test les fonctions 2D d'opengl (glDrawPixels,
    glCopyPixels,glRasterPos2i,glReadPixels) etc......
    Oui, ça c'est en effet étonnament lent (enfin pour ce que j'ai entendu dire).

    Il existe une technique rapide pour afficher des 'tiles' avec les fonctions
    glTexCoord2f et glVertex3f.
    En fait, plus généralement la bonne technique pour faire la 2D de nos jours c'est de la traiter comme de la 3D plate. Donc globalement tu es dans le bon.

    la encore je trouve qu'il y a beaucoups de contraintes et cette tech
    nique est loin d'etre efficace, le code deviens vite assez gros pour pas
    grand chose.
    Le code "gros" tu peux le régler avec un bon design (surtout si tu développes en C++), et l'efficacité... C'est de la 3D (plate certe, mais de la 3D), et si OpenGL ne sait plus faire de la 3D efficacement, alors où va le monde ? Moi je crois surtout que c'est toi qui ne gère pas ça efficacement

    j'attend vos avis sur les techniques efficaces pour faire de la 2D comme

    au bon vieu temps. que ce sois en assembleur ou en C.
    Justement je crois que c'est ça ton problème : les techniques ont changé, il ne faut plus faire de la 2D comme au bon vieux temps si tu veux tirer partie au maximum de ton matériel.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    merci de ta réponse, effectivement les techniques ont changé c'est certain,

    mais c'est de voir ces possibilités aussi peu exploitables, je trouve idiot de devoir utiliser des techniques 3d pour faire de la simple 2d .

    pourquoi existe t'il si peu de jeux 2d ecris en opengl ?? je me demande

    bien pourquoi


    peu etre que je suis un peu trop nostalgique de l'époque amiga avec son

    blitter .

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par kagemusha
    mais c'est de voir ces possibilités aussi peu exploitables, je trouve idiot de devoir utiliser des techniques 3d pour faire de la simple 2d .
    Ce n'est pas si idiot, si on regarde comment fonctionnent les cartes graphiques actuelles. D'autant plus que ça permet d'utiliser d'autres effets accélérés : alpha-blending, transformations, shaders, ...

    Citation Envoyé par kagemusha
    pourquoi existe t'il si peu de jeux 2d ecris en opengl ?? je me demande

    bien pourquoi
    Peut-être que les gens préfèrent utiliser une API de plus haut niveau (SDL par exemple) pour la 2D, étant donné qu'elle ne nécessite pas d'énormes performances graphiques ? Ou peut-être simplement que beaucoup de gens sont dans ton cas (on voit encore quelques personnes programmer avec DirectDraw, juste par peur de la "2D en 3D")?

  5. #5
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    en fait sur le net on peut trouver pleins de petits jeux 2D ecrits en openGL, par contre pour les jeux commerciaux, effectivement on en voit pas, mais ca viens peut etre du fait que plus personne ne fait de jeux 2D
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  6. #6
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut Re: OpenGL trop lent pour la 2D !!!
    la encore je trouve qu'il y a beaucoups de contraintes et cette tech
    nique est loin d'etre efficace, le code deviens vite assez gros pour pas
    grand chose.
    Je trouve plutot que tu n'as plus les mêmes contraintes, les cartes graphiques et les processeurs de nos jours ont tellement de fonctions que les utiliser c'est un bras de fer inimaginable surtout en assembleur
    essayes un peu d'afficher un sprite en prenant en compte que ton processeur peu intégrer des technologies telles que MMX, 3DNOW!, SSE, SSE2, SSE3, et j'en passe, et ta carte graphique à qui tu dois passer tes pixels en BGRA si c'est une ATI, RGBA si c'estune NVIDIA, ARGB si c'est une autre marque, les pixels shaders à activer ect, bah oui les drivers font tout cela pour toi aujourd'hui et ce sont autant de contraintes en moins

    j'ai passer beaucoup de temps sur google pour essayer de trouver des exemples de jeu 2d, scrolling parallax, multi directionnel, horizontal
    vertical,a base de 'tiles', en opengl et vu le peu de resultats j'en conclus
    que OpenGL pour la 2d c'est de la m.......
    eh oui, OpenGL à la base est une bibliothèque prévue pour faire de l'imagerie de synthèse en 3D, comme le veux le dicton "qui peut le plus peut le moins" si tu peux faire de la 3D tu peux faire de la 2D en "oubliant" une composante, OpenGL étant à mettre au même niveau de ... Direct3D essayes de faire un jeu 2D comme tu l'entends avec Direct3D et ce sera pareil, de là à dire que c'est de la merde c'est un peu fermé comme raisonnement

    Je me rappel de l'époque ou je codais en assembleur sur amiga, en
    quelques lignes je pouvais exprimer toute la puissance du blitter ou du
    copper.
    et aujourd'hui tu peux exprimer toute la puissance des nombreux modèles de cartes graphique avec OpenGL

    a l'époque des processeurs aux gigaherz et des API je me dis qu'il y a une certaine régression, on nous laisse de moins en moins la possibilité de bidouiller nos puces (pour la compatibilité des programmes ??), on est cantonner dans un schéma.
    Régression ? non, évolution oui, pour les mêmes raisons que je donnai au début et aussi pour, comme tu dis, la compatibilité, rien ne t'empeche d'attaquer en assembleur ta carte graphique ou ton processeur, seulement le résultat sur un proco sera t-il le même sur un autre (PIII -> PIV -> Athlon -> Athlon64 -> PentiumM...)

    me reste t'il une seule solution ? . coder toute mes fonctions blitter en C ou assembler, les utiliser dans un buffer pour ensuite l'injecter dans la carte graphique.
    Utilises les drivers qui te sont fournis, ils te donnent accès à tout ce dont tu as besoin, C ou C++ ? à toi de choisir, assembleur ? non il n'est pas mort, à toi de savoir où et quand l'utiliser à bon escient, si tu veux vraiment l'utiliser...

    j'attend vos avis sur les techniques efficaces pour faire de la 2D comme au bon vieu temps. que ce sois en assembleur ou en C.
    On est plus au bon vieux temps, si tu veux faire de la 2D comme au bon vieux temps tu le fait sur une machine fixe, comme un amiga un atari ou pourquoi pas une console par exemple, tu n'auras pas de problèmes de compatibilité (encore que ?)

    p.s : désolé pour les fautes de francais
    Pas grave pour les faute, tant que c'est pas du sms
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    premierement je n'ai pas dis qu'OpenGL etait de la m...... au contraire

    j'adore cet API et programmer de la 3D est un vrai bonheur, je disais simple-

    ment que pour la 2D ce n'est pas vraiment adapté.



    et non désolé de te contredire mais la 2D est loin d'etre morte

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Points : 12 462
    Points
    12 462
    Par défaut
    Si tu veut faire de la 2D, autant prendre SDL qui vraiment adaptée pour ca et en plus, elle est assez simple à apprendre, s'en est parfois même déconcertant tellement elle est facile

    Et c'est clair, la 2D est loin d'être morte, j'en suis un nostalgique et encore beaucoup de jeux libres sont fait en 2D !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Ou alors Allegro

  10. #10
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par kagemusha
    premierement je n'ai pas dis qu'OpenGL etait de la m...... au contraire
    Citation Envoyé par kagemusha
    j'ai passer beaucoup de temps sur google pour essayer de trouver des
    exemples de jeu 2d, scrolling parallax, multi directionnel, horizontal
    vertical,a base de 'tiles', en opengl et vu le peu de resultats j'en conclus
    que OpenGL pour la 2d c'est de la m.......
    j'aurai dû préciser "pour la 2d"

    et non désolé de te contredire mais la 2D est loin d'etre morte
    Tu ne me contredit pas, j'ai beau me relire je ne vois nulle part où j'ai pu écrire cela
    tu as peut-etre interprété le fait que je considère que vouloir faire de la 2D "Comme au bon vieux temps" n'était plus réellement possible mis à part sur les consoles ou une machine bien fixée car trop de cas de compatibilité à prévoir
    "Comme au bon vieux temps" = attaque des composants de la machine en utilisant l'assembleur pour tirer le meilleur du matériel

    Sinon en accord avec CSoldier au sujet de SDL, c'est plus facile pour faire de la 2D, mais OpenGL s'en sort très bien si tu construit correctement ton "moteur"

    j'ajouterai que beaucoup cherchent à faire des jeux 3D en voyant comment OpenGL est facile à utiliser, mais commencer par faire un petit jeu 2D permet déjà d'apprendre les base pour faire un jeu et éviter des erreurs dans un projet plus conséquent

    sur ce, je retourne développer mon adaptation d'un pacman version Excel100 (ordinateur français que personne ne connait lol)

    PS: et je ne plaisante pas
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  11. #11
    Invité
    Invité(e)
    Par défaut
    kagemusha > t'es obligé de retourner à la ligne comme ça ? ça sert à rien...

    Pour OpenGL en 2D, je trouve au contraire que ça marche très bien. Il faut en effet le voir comme un forme "dégénérée" de 3D, c'est à dire que tu vas utiliser une projection orthogonale, désactiver le depth-buffer, et ne dessiner que sur le plan Z=-1.
    Pour faire cela, tu peux utiliser gluOrtho2D() et les glXxxx2x (exemple glDraw2i).

  12. #12
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    non justement, pas de glDraw, c'est super lent, il faut mieux utiliser des textures que tu affiche sur un quad...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  13. #13
    Invité
    Invité(e)
    Par défaut
    Et comment tu affiches le quad sans glDraw() ?

  14. #14
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    glBegin(GL_QUADS);
        glTexCoord3f(...);
        glvertex3f(...);
        glTexCoord3f(...);
        glvertex3f(...);
        glTexCoord3f(...);
        glvertex3f(...);
        glTexCoord3f(...);
        glvertex3f(...);
    glEnd();
    et voila... bien entendu on peut passer par une display list ou autre vertex array pour accelerer le tout
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  15. #15
    Invité
    Invité(e)
    Par défaut
    Ben alors, tu fais bien ce que j'ai dit...
    Sinon, glvertex3f n'existe pas, le C étant sensible à la casse.

    Tu peux aussi utiliser glTexCoord2f() et glVertex2i() qui sont à mon avis plus adaptés à la 2D.

    Evidement, il vaut mieux passer le plus possible par des Display Lists, mais en 2D c'est rarement possible.

  16. #16
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Citation Envoyé par remram44
    Evidement, il vaut mieux passer le plus possible par des Display Lists, mais en 2D c'est rarement possible.
    Aucun rapport avec la 2D, les display list permettent simplement de mettre en cache des commandes opengl
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Je sais, c'est pourquoi c'est rarement utile en 2D (ça peut l'être dans le cas d'un gros niveau vectoriel par exemple, alors que pour quelque chose en tiles ça sert à rien).

  18. #18
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Je ne suis pas d'accord, pour le rendu de texte par exemple (qu'il soit en 2D ou en 3D), utiliser les displaylist plutot que des vertex array est plus intéressant car dans les displaylist tu peux stocker des glTranslate (pour avancer d'une lettre à l'autre)

    comme je disais tu peux stocker des commandes opengl et tu peux construire un objet à partir de primitives et de commandes avec les diplaylist
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

Discussions similaires

  1. Trop lent pour faire la même chose en mieux
    Par Geralds dans le forum Emploi
    Réponses: 15
    Dernier message: 13/12/2013, 10h00
  2. Réponses: 3
    Dernier message: 16/07/2013, 15h07
  3. Programme OpenGL trop lent..
    Par dridri85 dans le forum OpenGL
    Réponses: 8
    Dernier message: 07/07/2009, 14h28
  4. FileCopy trop lent pour l'execution du code
    Par zephirsoul dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/06/2007, 11h44
  5. Réponses: 6
    Dernier message: 08/03/2007, 17h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo