Journal Développer des jeux vidéos sous Linux ?

Posté par  .
Étiquettes : aucune
0
17
avr.
2005
Bonjour,

Me posant de nombreuses questions concernant la programmation de jeux vidéos sous linux, je me suis décidé à rédiger un petit journal sur DLFP. A l'origine, je codais sous Windows. Fana de jeux vidéos, je me suis vite tourné vers leurs programmation, découvrant avec étonnement et motivation un monde absolument énorme. J'ai vite abordé DirectX, et j'ai été enthousiasmé par les possibilités offertes par cette API.

Mais quand je suis passé sous Linux, il m'a fallut me tourner vers autre chose. Après pas mal de recherches, de tatonnements avec glut, DevIL, et autre joyeusetés, j'ai découvert SDL (doooh, c'est chouette, c'est simple, et ça fait plein de choses), et OpenGL. Pour ce dernier, c'est autre chose. Je découvre avec déception une API certe stable et plutôt simple d'accès, mais... en C ! Quoi, pas de prog OO pour une API servant à coder des jeux vidéos ?
Et puis zut alors, c'est quoi cette histoire d'extensions ATI/NV/ARB ?

Bon, d'après les screens que j'ai vu sur le net, on peut faire des choses trèèèèès jolies en OpenGL, mais quand même, du C... Je sais, le C c'est très bien, on a codé le kernel avec, mais bon, quand même...
Actuellement, ma grosse motivation est que si Carmack a pu coder Doom 3 en OpenGL, c'est que ça doit marcher plutôt bien, mais alors Doom 3 est en C ? Ou alors tout est encapsulé. Et puis il utilise quoi, le monsieur, pour gérer les inputs, les sons, les vidéos, le réseau ? Pas SDL que je sache.

Il y a 3 mois, je me battais pour trouver une IDE C++ graphique sous nux, et puis finalement je me suis rendu compte que je préférais vim (pas de troll merci) + console, mais j'avoue que l'absence d'interface C++ à OpenGL me dégoûte un petit peu, sinon beaucoup. Peut être que d'ici 3 mois, j'apprécierai d'avoir recours a tout plein d'extension pour gérer chaque effet. Peut être que dans 3 mois, j'apprécierai de devoir installer, configurer, et maîtriser tout pleins d'APIs pour coder un jeu.

Je veux devenir développeur de jeux vidéos, et comme j'aime Linux, je
veux développer sous Linux, mais est-ce vraiment possible, de A à Z ?

Autant d'interrogations que je ne dois pas être le seul à avoir, qui me turlupinent, parce que j'aimerais bien coder du jeux vidéo sous Nux, moi et autre chose que la 2d permise par SDL (par contre je suis objectif, la 2d sous SDL ça marche au top).

Alors, je rêve ? Je fantasme ?
Pitié, montrez-moi qu'il y a de l'espoir.
  • # Réutiliser le code

    Posté par  (site web personnel) . Évalué à 10.

    Je ne suis pas spécialiste du sujet, mais une chose qu'elle est bien, sous GNU/Linux et (de manière plus générale) avec les logiciels libres, c'est la réutilisation du code.
    Plutôt que de redévelopper un n-ième moteur, reprends ceux qui sont libres et qui existent !
    On parle beaucoup de Ogre par exemple (cf http://www.ogre3d.org/(...) et http://www.ogre3d.org/wiki/index.php/Projects_using_OGRE(...) ). Ça a l'air d'être du C++ (je suppose que tu aime ça...), c'est sous LGPL et ça se veut généraliste.
    Et si il te plait pas y'en a pleins, comme Nevrax ( http://nevrax.org(...) ) par exemple.

    Sinon, je ne comprends pas bien ce que tu reproche au C, mais je préfère qu'on en parle pas, sinon c'est troll rasoir assuré -_^
  • # quake2 ?

    Posté par  (site web personnel) . Évalué à 3.

    tu peux déjà regarder comment est fait quake2? http://www.icculus.org/quake2(...) . le projet de icculus a rajouté pas mal de choses (utile ou pas), comme le support sdl, alsa, libaa, etc. Et oui, c'est du C (et oui, tu peux meme programmer objet en C si t'as envie)
  • # SDL, C++ et la 3D

    Posté par  (site web personnel) . Évalué à 5.

    Faire des applis 3d (OpenGL) avec SDL ça marche aussi, et avec SDL tu as des bindings avec C++, alors bon, faut savoir se documenter hein :p
    http://www.libsdl.org/opengl/index.php(...)

    Bon un exemple de jeu libre, au hasard, écrit en SDL/OpenGL C++ :
    http://happypenguin.org/show?GL-117(...)
  • # En haut niveau il y a le python...

    Posté par  . Évalué à 3.

    Exemple: soya, qui est derrière balazar.

    Snark
    • [^] # Re: En haut niveau il y a le python...

      Posté par  . Évalué à 1.

      Pour avoir codé quelques lignes pour balazar (promis, dès que j'ai un peu de temps, je m'y remet), je dois dire que ça vaut le coup de faire l'expérience.
      Sur le site de balazar, il y a des tutos pour découvrir la programmation de soya. On se rend compte que c'est assez simple a faire, pour un résultat très satisfaisant. (merci Jiba)
      PS : pour ceux qui ne sont pas au courant, python "est" orienté objet.
  • # Moteur 3D

    Posté par  . Évalué à 4.

    Ce que tu rechercherais, ce ne serait pas plutôt un moteur 3D (ce que n'est pas SDL) ? Tu as du te rendre compte qu'OpenGL est une API très bas niveau pour gérer des rudiments d'une scène 3D. Pour ce qui est de la gestion des phénomènes physiques (gravité, chocs, friction, etc...), ombres portées, mouvement par contraintes, import d'objets issus des modeleurs, etc... bah tu dois tout faire toi même.

    Même avec un binding C++, je ne pense pas qu'OpenGL sera beaucoup plus pratique à utiliser. Ce n'est pas le but, le but étant que ça soit facilement gérable au niveau matériel.

    Bref, ce qu'il te faudrait c'est une API d'un peu plus haut niveau encapsulant les appels à OpenGL. J'en connais deux, et utilisé seulement un :
    - Soya 3D : utilisé par Slune, écrit en Python. C'est celui que j'ai utilisé pour mes très maigres besoins. Il est vraiment très facile à utiliser.
    - Blender : Là aussi, c'est du python. Mais je ne me suis pas trop penché sur cet outil.

    Il doit y en avoir d'autres avec des bindings C++, comme tu sembles y être attaché. Le point clé de ce message étant qu'OpenGL ne t'offrira jamais de fonctions de haut niveau, donc cherche ailleurs.
  • # OpenGL, SGI, l'histoire de la 3D, toussa...

    Posté par  . Évalué à 7.

    Hm je veux bien que tu sois déçu de ne pas avoir trouvé de wrapper C++ à OpenGL (encore que tu n'es pas du bien chercher) mais au moins tu aurais pu te documenter un peu sur OpenGL... On dirait que tu fais un espèce de parrallèle (MS => DirectX) <=> (Linux => OpenGL), bref que quelqu'un a décidé un jour d'inventer une API pour faire de la 3D sous linux et a pondu openGL (je ne sais pas si c'est vraiment ce que tu pense, mais j'en ai l'impression en lisant ton journal).
    A vrai dire j'ai meme l'impression que tu connaissais meme pas OpenGL de nom avant d'apprendre DirectX et ca me fait encore plus peur en pensant au pouvoir de microsoft...

    OpenGL c'est un truc inventé par SGI bien avant que DirectX ne naisse, dont l'API est normalisée, et dont des implémentations existent sous un bon nombre d'Unix et pas seulement Linux mais aussi sous Win. Si bindings C++ il y a, ils ne seront eux pas normalisés.

    Une derniere chose : ce n'est pas parce que tu as une API en C que tu es obligé de l'utiliser avec un programme en C. Le C++ a justement été créé avec en tête la compatibilité des deux langages au niveau source et dans une moindre mais tout de même large mesure binaire.
    Enfin, rien n'empeche de faire de l'OO en C (la plupart des programmes bien écrit en C le sont d'ailleur ainsi).
    • [^] # Re: OpenGL, SGI, l'histoire de la 3D, toussa...

      Posté par  . Évalué à 1.

      Non, j'ai bien compris la différence DirectX/OpenGL, mais ça me gêne un peu quand même...
      Et je ne cherche pas un moteur, car ça, je préfererais le développer moi-même, mais une plate-forme multimédia unifiée (justement façon DirectX), ça me plairait bien.

      Exemple, les shaders. Sous DirectX, ça fait partie du système, c'est parfaitement intégré.
      Sous OpenGL, il faut aller chercher des extensions selons la cg que l'on a, c'est tout sauf pratique.

      Pour les inputs ? Une autre lib.
      Pour les médias ? Une autre lib.
      Pour l'audio ? Une autre lib.
      Pour le réseau ? Une autre lib.

      Oui, OpenGL n'est pas DirectX, mais disons de manière mieux formulée que j'aurais voulu qu'il existe un système façon dx sous linux.
      Et pis grosse question, comme Carmack fait-il pour gérer ttes ces apis ! (et puis en général les codeurs de NeverwinterNights, UT2004, etc...)
      • [^] # Re: OpenGL, SGI, l'histoire de la 3D, toussa...

        Posté par  . Évalué à 4.


        Pour les inputs ? Une autre lib.
        Pour les médias ? Une autre lib.
        Pour l'audio ? Une autre lib.
        Pour le réseau ? Une autre lib.


        La libSDL fait tout cela ....
        • [^] # Re: OpenGL, SGI, l'histoire de la 3D, toussa...

          Posté par  (site web personnel) . Évalué à 3.

          et puis à la limite, tu peux te créer une sorte d'interface entre les api, tu te crées une couche unifiée en C++ que tu peux alors réutiliser par tes programmes... et de l'autre côté de la couche, tu dois alors implémenter le nécessaire pour utiliser tel ou tel api... de plus en faisant comme ça, tu auras déjà du code portable car n'importe qui peut alors changer openGl en Directx sans que ton programme ne subisse quoi que se soit.
      • [^] # Re: OpenGL, SGI, l'histoire de la 3D, toussa...

        Posté par  . Évalué à 2.

        à l'usage, utiliser OpenGL + ses extensions qui vont bien pour ce dont tu as besoin + une ou plusieurs librairies pour les entrées, le chargement des ressources, etc. n'est pas forcemment plus difficile que maitriser DirectX :) D'accord sous Linux tout cela n'est pas unifié, mais ça ne représente pas plus de travail :) Et au moins ça te permet de choisir avec quelle bibiothéque tu souhaites travailler, et de les mixer pour te donner un panel d'outils avec lequels tu aimes travailler.

        D'un point de vue personnel d'ailleurs, j'ai pris bien plus de plaisirs en utilisant SDL/Clanlib/OpenGl/etc. que DirectX, que je trouve plus compliqué à manier (encore que je n'ai pas testé le Managed DirectX, qui est parait-il bien plus agréable que le DirectX non managé).
      • [^] # Re: OpenGL, SGI, l'histoire de la 3D, toussa...

        Posté par  (site web personnel) . Évalué à 4.

        Exemple, les shaders. Sous DirectX, ça fait partie du système, c'est parfaitement intégré.
        Sous OpenGL, il faut aller chercher des extensions selons la cg que l'on a, c'est tout sauf pratique.


        Non, plus maintenant avec GLSL (OpenGL Shading Language) ! Pour le moment on y accède via une extension ARB, mais ce sera bientôt totalement intégré dans l'API OpenGL.

        Mais plus besoin de faire au cas par cas pour les cartes graphiques, sauf peut-être pour les plus vieilles dont on peu en tirer mieux avec les extensions propriétaires (NV, ATI) qu'avec une implémentation « faible » de GLSL pour elles.

        Pour ce qui est d'une interface en C++, bon..., ça dépend des gouts hein... Franchement l'API DirectX, ce que j'en pense de son style... :-)
      • [^] # Re: paradigmes divergents !

        Posté par  . Évalué à 8.

        j'ai bien compris la différence DirectX/OpenGL, [...] mais une plate-forme multimédia unifiée (justement façon DirectX), ça me plairait bien.

        Donc non, tu n'as pas bien compris la différence entre DirectX et OpenGL. Le dernier, justement, sert à faire du rendu 2D/3D et ne sert qu'à ça. En fait, je crois que c'est plus la distinction entre les philosophies de base de windows et d'unix, que tu n'as pas comprise : dans un cas on intègre tout au maximum, sans doute pour montrer qu'on a « la plus grosse boîte » ou bien parce que comme ça, l'utilisateur « ne perd pas de temps » ; dans l'autre, on n'hésite pas à fragmenter pour assurer une fonctionnalité ciblée et un choix accru (pour les autres services, ici son/réseau/entrées...)

        Et pis grosse question, comme Carmack fait-il pour gérer ttes ces apis !

        Toute petite réponse : Carmack codait déjà quand j'étais tout petit (allez, « presque »).

        Enfin (et là je vais donner l'impression de me renier à ceux qui me connaissent ;), c++ c'est bien, oui, mais on n'a certainement pas besoin d'en avoir partout. Les fonctions d'opengl réalisent des tâches tellement primitives qu'il serait inapproprié de les encombrer d'une approche objet.

        [La suite est un peu longue et technique.]

        Par exemple, la programmation type « machine à état » est beaucoup plus appropriée que l'utilisation de classes avec constructeurs/destructeurs, le tout étant prévu pour fonctionner avec peu ou pas d'invariants vérifiés par le système.

        A côté de ça, le polymorphisme ad hoc (fonctions virtuelles et rtti, en c++ ; tout ce qui est polymorphisme dynamique) n'a évidemment pas sa place dans le type d'applications visées... si tant est qu'on puisse déjà bâtir des hiérarchies avec les classes d'un système de si bas niveau !

        Question polymorphisme statique... aucun rapport. On passe.

        Les exceptions : ce serait élégant mais, comme dit plus haut, on en aurait pas besoin souvent. En fait, ça ne servirait qu'à empêcher les liaisons avec la plupart des autres langages, notamment C.

        Non, franchement, les deux seuls éléments du c++ qui pourraient bénéficier à opengl :
        - les namespaces, sauf que les dév de libs C ont, depuis toujours, une réponse équivalente : le préfixage des noms de fonctions et l'utilisation intensive du niveau de linkage interne (static au niveau global) ;
        - la surcharge de fonctions, et encore... les ambiguïtés pleuveraient tellement que ça ne serait pas la peine ; avec le système de suffixes, on sait tout de suite ce qui se passe sans avoir à y réfléchir (et c'est pourtant un des buts de c++, de « désobfusquer » le code).

        Donc non, franchement, je ne vois pas pourquoi on pourrait vouloir d'un opengl en c++ (extern "C" étant ton ami, et il est déjà dans tous les headers). Je suis même à peu près convaincu que ce genre de regret dénote un manque de compréhension de la portée ou de l'intention d'opengl.

        ... Et je me fais cette réflexion en relisant mon commentaire : en fait, tu ne regrettes pas fondamentalement qu'opengl ne soit pas « écrit en c++ ». Juste qu'en ayant l'air de dire cela, tu dis plutôt que n'as pas trouvé l'ensemble de ce que tu cherches. Un petit conseil : regarde SDL d'un peu plus près, pour ce qui est de l'intégration des services. Pour ce qui est du haut niveau (qui justifierait l'OO et tout), tu le dis toi-même : « je préfererais le développer moi-même ».
        • [^] # Re: paradigmes divergents !

          Posté par  . Évalué à -2.

          Oula, j'en prend plein la tâte moi ^^.
          Pour faire simple, je sais que je suis plutôt difficile.

          - La SDL, peut être utilisée de deux manières:
          * Seule, en tant qu'API multimédia, auquel cas elle fait du très bon travail en 2D.
          * En conjonction avec OpenGL auquel cas elle sert plus de panel de fonctions à la façon de GLUT. Ok, elle gère quand même 'un poil' plus de choses que GLUT, mais c'est un peu le principe, non ?

          Jusque là, je l'utilisais de la première manière, et j'hesite à passer à la seconde, me demandant de que les pros utilisent.

          - Le troll C vs C++ n'est pas nouveau, mais à mon goût, le C++ est beaucoup plus flexible, sûr et intuitif que le C. Effectivement, c'est un poil plus lourd, et parfois 'overkill', mais dire froidement que dans le cas de l'OpenGL, ça ne servirait à rien... Personnellement, avoir de la surcharge d'opérateurs, des exceptions, et du polymorphisme (ne serait-ce que ça), je ne dirais pas non.

          - Pour les APIs python, pas la peine, je ne code pas en python, et ne l'envisage pas, je souhaite coder en C++ :)

          - Là je viens de télécharger la source de quake2, ça m'a l'air plutôt bien foutu, donc je vais étudier tout ça.
          • [^] # Re: paradigmes divergents !

            Posté par  . Évalué à 3.

            - La SDL, peut être utilisée de deux manières:
            * Seule, en tant qu'API multimédia, auquel cas elle fait du très bon travail en 2D.
            * En conjonction avec OpenGL auquel cas elle sert plus de panel de fonctions à la façon de GLUT. Ok, elle gère quand même 'un poil' plus de choses que GLUT, mais c'est un peu le principe, non ?


            Non, ben là, y a un truc que t'as pas bien vu : c'est pas parce que tu utilises opengl que les api son/réseau/threads... de SDL disparaissent.

            Le troll C vs C++ n'est pas nouveau

            Et comme prévu, on m'a déjà demandé si je m'étais drogué, pour mon post précédent ;) Je suis le genre inconditionnel de c++, mais là, aucun intérêt. C'est tout. Si tu trouves que c'est balancé froidement, relis... non pardon, lis mon post précédent.

            Effectivement, c'est un poil plus lourd, et parfois 'overkill'

            Hmm... t'es sûr que t'as bien digéré ta bible ? Ou alors tu ne t'abreuves pas au Saint Stroustrup's TC++PL, 3rd ed (1) ! Allez, cours de rattrapage : « à fonctionnalité égale, C++ n'est pas moins efficace que C ».

            (1) http://www.research.att.com/~bs/3rd.html(...)
        • [^] # Re: paradigmes divergents !

          Posté par  (site web personnel) . Évalué à 1.

          J'ai moinsé ton message, chose que je fais rarement. Mais je tiens à expliquer pourquoi.

          Une chose qui m'énerve profondement dans la majoritée des système a forum comme ici, c'est le manque d'un minimum de respect de la part de certaines personnes.
          Ok, il n'y a dans ton message aucune accusation directe, mais en le lisant on peut sentir un certains dédain, voir mépris.

          Donc non, tu n'as pas bien compris la différence entre DirectX et OpenGL. Le dernier, justement, sert à faire du rendu 2D/3D et ne sert qu'à ça.

          Il me semble au contraire qu'il a très bien compris la différence entre les deux, ce qu'il cherche c'est un wrapper C++, à la fois pour OpenGL et pour des libs annexes, pour au final obtenir un système de développement de jeux tel que DirectX. (OpenGL étant plus à comparer avec Direct3D)

          Toute petite réponse : Carmack codait déjà quand j'étais tout petit (allez, « presque »).

          Mais Carmack à lui aussi été petit malgré ce que prétend la légende. De plus ce genre d'attaque est pitoyable, au moins dans le monde informatique, quand on voit la qualitée des contributions de certains. Dans pas si longtemps que ça on vera des codeur qui n'aurons pas connus le milénnaire précédant.
          De plus, rien ne te permet de porter cette accusation, Nicolas a peut-être 60ans, il a developpé pendant 35 ans dans une boite privée, et fait un du DirectX sur la fin de sa carrière, et maintennant qu'il est à la retraite il veux continuer pour sa pomme sur son système libre favori.

          Pour la partie sur le C vs C++

          Comme d'hab, je ne dirais qu'une chose chacun ses goûts. Si il veux developper son truc pour lui, ou même un truc destiner aà la communautée, autant qu'il le fasse dans un langage qu'il aime, ça augmente les chances qu'il le maintienne plus tard et si ça ne te plait pas tu ne l'utilise pas.
          De plus tu prétend que le C++ n'est pas adapté à l'OpenGL, que c'est des truc à faire avec du bas niveau, mais dans ce cas là il faut passer directement à l'assembleur. (si si on peut faire de l'OpenGL en asm) Mais pourquoi utiliser OpenGL, alors que l'on dispose toujours du fantastique ModeX du VGA.
          OK j'abuse, mais Nicolas a surement de bonne raisons (en tout cas pour lui) de choisir le C++, donc au lieu de critiquer son choix le mieux aurait été de lui expliquer de manière réellement constructive pourquoi tu n'aurais pas fait le même.


          Je trouve qu'il est dommage de gacher aussi bêttement un post qui contiens pourtant aussi des propos interressants mais noyé dans le reste...
          • [^] # Re: paradigmes divergents !

            Posté par  . Évalué à 2.

            Je suis assez d'accord avec toi.
            Pour avoir jeter un coup d'oeil à DirectX ou plutôt Direct3D et même avoir acheté un bouquin, je n'ai rien compris ! Certes, je n'ai pas trop insisté mais le bouquin était inbuvable, la doc idem... Bref, un peu rebutant.

            Alors que l'OpenGL, c'est tellement simple (mais j'avoue n'avoir pas poussé très loin mes investigations) et on s'y met très vite que l'on est bien content que ce soit en C !
            http://nehe.gamedev.net/(...)
            Idem pour SDL ! Quelques fonctions bien fouttues que l'on appelle comme on veut ! Quelle souplesse !

            Mais perso, quand je programme, j'aime bien structurer les choses et c'est pourquoi je ne peux pas me passer du C++.
            Donc, j'encapsule tout dans des objets pour mes usages propres et c'est très pratique !

            Bref, la souplesse du C permet aussi de profiter du C++ ! Alors que l'inverse ne serait pas vrai. (Et on peut étendre ça à Python, Ruby et l'utiliser avec Gtk, Qt, etc...)

            Sinon, pour éviter d'avoir à réimplémenter des wrappers, il faudrait voir ce qui existe et je pense qu'il y a des tonnes de choses. Reste à faire des benchmarks sur la maturité, les fonctionnalités, les domaines d'applications et avoir des retours !
            Il y a effectivement des choses comme Ogre mais je ne sais pas si c'est seulement un moteur 3D ou si Ogre permet d'accéder aux autres fonctions multimédias (audio, "2D", entrées/joystick, etc..)
          • [^] # Re: paradigmes divergents !

            Posté par  . Évalué à 1.

            Je trouve que ça relève du troll sur les bords, mais je vais expliquer pourquoi je suis pas d'accord.

            manque d'un minimum de respect
            on peut sentir un certains dédain, voir mépris (dans mon tu n'as pas bien compris la différence)

            Non, aucun manque de respect, aucun dédain, aucun mépris. Je n'ai pas de préjugé négatif quant au fait que quelqu'un ne sache pas un truc ou quant au fait de lui faire remarquer. A l'opposé, ça ne flatte pas mon ego d'expliquer à quelqu'un pourquoi je pense différemment.

            ce qu'il cherche c'est un wrapper C++, à la fois pour OpenGL et pour des libs annexes

            C'était la réflexion finale de mon post. J'ai l'habitude de préserver mon sens (ordre) de raisonnement plutôt que de refaire le milieu au moment où j'arrive à la fin. Ca peut effectivement dérouter, mais dans ce cas, je ne trouve pas que ça crée de contradiction.

            Mais Carmack à lui aussi été petit malgré ce que prétend la légende. [...] De plus, rien ne te permet de porter cette accusation, Nicolas a peut-être 60ans, il a developpé pendant 35 ans [...]

            Là, de une, typiquement, j'ai remplacé un smiley par une touche d'humour (Toute petite réponse). De deux, je faisais référence à l'expérience du monsieur dans le domaine précis dont on parle. Un gars arrive et dit « je suis nouveau et je comprends pas comment font les dinos », ben la réponse est « c'est des dinos ». Il reste bien entendu que ces même dinos ont aussi débuté un jour, qu'à l'époque ils ont cherché, et qu'ils sont passés par l'équivalent d'alors du journal de Nicolas... Je trouvais juste que cette explication, ça faisait beaucoup de mots pour pas grand chose, d'où l'ellipse.

            Si il veux developper son truc

            Je ne crois pas vraiment qu'il ait, là tout de suite, la moindre intention de se jeter dans la réalisation d'un équivalent OpenGL. ;)

            De plus tu prétend que le C++ n'est pas adapté à l'OpenGL

            Je ne prétends pas, puisque j'ai détaillé.

            si si on peut faire de l'OpenGL en asm

            Et là, j'ai l'idée qu'on n'est pas du tout sur la même longueur d'onde (ceci sans insinuer, bien sûr, que la mienne est plus longue que la tienne ;-P ). Quand je dis « c++ ne présente aucun avantage pour opengl », je parle de la forme de l'api ; pas du langage de l'appelant !

            Donc Nicolas, des fois que je me sois mal exprimé sur ce point, sache que tu n'es pas tout seul à coder en c++ des applis qui utilisent opengl. Là dessus je n'ai, évidemment, rien à redire. Mon propos était « une alternative "interfacée en c++" équivalente en termes de fonctionnalités à opengl, je ne vois pas bien ».

            au lieu de critiquer son choix le mieux aurait été de lui expliquer de manière réellement constructive pourquoi tu n'aurais pas fait le même

            < mode=ironie > <!--si si, quand même, mais avec les bonnes balises> Tu aurais pas décroché dès que j'ai dit « ça va être technique » (1), des fois ? < /mode >

            [Mais bon, que quelqu'un m'inutile, svp : débattre de la forme ne sert pas le fond. Tout ça ne répond pas à la question]

            --
            (1) D'ailleurs, « ça va être tout noir ! »
            • [^] # Re: paradigmes divergents !

              Posté par  . Évalué à 1.

              Eh beh dis donc !
              ça fait du bien de voir que quelqu'un m'a compris !

              J'ai 19 ans, je code depuis environ 5 ans, 3 ans de cpp, 1 an de DirectX, et je préfère jusque là l'interface DirectX à celle OpenGL. Chacun ses goûts, comme toujours, mais pour ma part, une interface orientée objet, tirant partie des mécanismes C++, de la STL, reste bien préférable.

              On peut se taper dessus longtemps comme ça, car de tte manière personne n'a vraiment raison, vu que tout dépend du choix de chacun.

              Histoire quand même de ne pas passer pour un idiot, ma question "comment fait Carmack", n'est pas une admiration naïve du monsieur, en attendant une méthode miracle, mais plutôt une interrogation simple.
              Bien sûr, il ne s'agit pas de bêtement copier, mais si Carmack, ou en général aucun développeur professionnel (je parle des superproductions type NeverwinterNights, Unreal Tournament, Doom 3...) n'utilise SDL, par exemple, c'est bien qu'il y a une raison.
              De même, s'ils utilisent telle ou telle API audio (je dis ça au hasard), c'est bien qu'elle a quelque chose qui fait que c'est avantageux de l'utiliser elle plutôt qu'une autre.
              De la même manière, on peut se demander pourquoi les jeux professionnels récents sont tous en C++, et pas en C...... (ok, là je suis méchant, je retombe dans le troll)

              Enfin bon, vais m'arrêter là :/
              • [^] # Re: paradigmes divergents !

                Posté par  (site web personnel) . Évalué à 2.

                Bien sûr, il ne s'agit pas de bêtement copier, mais si Carmack, ou en général aucun développeur professionnel (je parle des superproductions type NeverwinterNights, Unreal Tournament, Doom 3...) n'utilise SDL, par exemple, c'est bien qu'il y a une raison.

                Franchement, tu pourrais te documenter avant de sortir de telles âneries. Sur tes 3 exemples, tu t'es planté pour deux ! En effet, NeverwinterNights et Unreal Tournament 2003/2004 utilisent SDL. D'ailleurs la plupart des jeux portés par Ryan Gordon utilisent SDL (America's Army, Postal 2, Serious Sam 2, Army Ops...).
                • [^] # Re: paradigmes divergents !

                  Posté par  . Évalué à 1.

                  Si je te remercie de l'information, je ne te remercie pas pour la gentillesse avec laquelle elle est donnée. Bravo l'aimabilité, qu'est-ce que ça serait si celle-ci était payante....

                  Donc SDL serait un investissement valable, même au niveau professionnel.
  • # \_o<

    Posté par  (site web personnel) . Évalué à 2.

    Actuellement, ma grosse motivation est que si Carmack a pu coder Doom 3 en OpenGL, c'est que ça doit marcher plutôt bien, mais alors Doom 3 est en C ? Ou alors tout est encapsulé. Et puis il utilise quoi, le monsieur, pour gérer les inputs, les sons, les vidéos, le réseau ? Pas SDL que je sache.

    eh non ... Carmak est intelligent.

    Tu vois Java ? c est bien, c est portable, c est lent.

    Karmac s est donc dit, depuis Quake 2 ... y a deux bonnes idees dans Java: Bien+portable. Cela est inherent a une qualite essentielle: la machine virtuelle: VM.

    Loin de moi l idee que Quanke/Doom est inspire, ou meme base sur Java, mais voila ou je veux en venir:

    Carmak ecrit une VM en C, ca pese quoi ... 800K tout compile, ca se code vite fait, et dedans, tu ecris ton propre langage, ton compilo, tes APIs ... et tu est le roi chez toi.

    Porter ton jeux ? ben tu porte juste la VM. Bref, tu porte ni ton langage, ni ton API, juste la VM.

    Cf les sources de Quake2 qui sont open.
    • [^] # Re: \_o<

      Posté par  . Évalué à 2.

      Je crois que tu t'es un peu planté ...

      D'abord l'histoire de la VM n'est arrivé qu'avec Quake 3. Pour quake 2, on compile son dll et son .so pour chaque archi.
      En plus, la partie interprétée par la VM n'est QUE la logique du jeu. Le moteur lui est compilé directement pour la plateforme, et écrit en C (pour Quake 3 du moins).
      Ce besoin d'une VM pour la logique du jeu vient (d'apres moi) du fait que les développeurs de mods n'ont pas toujours accès à toutes les plateformes où tourne Q3, alors pour éviter de n'avoir que des mods pour windows (plateforme majoritaire chez les moddeurs), il a créé ce système de VM. Bon, au final ca a quand meme causé qq problèmes avec les windowsiens qui se plaignaient de la lenteur de la VM par rapport à un dll natif (lenteur relative, mais dans un jeu où pour beaucoup garder son compteur de fps à 125 est très important, ça compte).
      Ensuite, son propre langage pour la VM, bah c'est en fait du C. Je sais pas si toutes les bidouilles du C sont permises, mais dans la très grande majorité des cas (i.e. j'ai jamais entendu parlé de problèmes de ce genre) ça tourne nickel (carmack a appris les problèmes d'un "presque C" avec Quake1 et le QuakeC).

      Donc porter son jeu n'a pas été aussi simple. En fait, pour répondre à l'interrogation de Nicolas, Carmack a créé sa propre API d'abstraction des différentes parties de l'interaction (clavier, souris, vidéo, etc...). Elle tourne au dessus de DirectX sous windows (ce qui rend cette partie simple car DX fait la majorité du boulot) et d'API plus bas niveau sous nux (accès direct à X11, et OpenGL). Il utilise quand meme OpenGL sous windows, DirectX lui sert seulement pour le reste.

      Donc "Use the source, Luke!" et va voir le code de Q2 comme dis plus haut. Par contre si tu t'intéresse à la VM de Q3, va falloir attendre car Carmack n'a toujours pas donné le code source; bien que promis à noel, le cadeau a été repoussé...
  • # 3D avec SDL

    Posté par  . Évalué à 2.

    Je ne m'y connais que très peu, mais bon... Sur le site de SDL, directement en page d'accueil, il est bien expliqué que SDL te permet de faire de la 3D, et ce en utilisant OpenGL en "backend".

    http://www.libsdl.org/index.php(...)

    De toute façon, SDL correspond au même usage que DirectX... sauf que c'est multi-plateformes...
  • # python

    Posté par  . Évalué à 1.

    Si tu veux programmer objet, haut niveau, proprement et profiter d'APIs comme OGL et SDL, je te suggère python :

    - python-opengl
    - python-sdl (i/o et integration OGL)
    - python-gst (bindings GStreamer, sortie SDL, OGL, etc.)

    Et si t'as besin de bonnes perfs, il existe un compilo python performant qui zappe l'interpréteur.
  • # Crystal space

    Posté par  (site web personnel) . Évalué à 3.

    Une bibliothèque multi plateformes, qui fait plein de choses (3D, son, inputs mais peut être pas le réseau), écrite en C++ :

    http://www.crystalspace3d.org/(...)
  • # nebula engine

    Posté par  . Évalué à 1.

    J'avais un peu regardé les moteur 3D il y a quelque temps et le seul qui semblais d'un qualité equivalente à la moyenne des moteur 3D du marché en logiciel libre était le moteur nebula.

    Il est développé par radon lab et d'autre programmeur indépendant. Actuellement ils font la version 2. Le premier moteur étais utilisé par le jeux de radon labs project nomads (2002). il semble tourné sur Linux, Windows en open GL et/ ou direct X.

    Le moteur fais tout et recoit en entrés des fichiers de descriptions de scene écrit soit en Lua, soit en python soit en TCL. Tu peut aussi attaquer directement l'api en C++. Bon faut prendre ce que je dis avec des pincettes mais si t'es motivé je pense qu'il est celui qui offre le plus de possibilité et est le plus aboutie. J'ai crus comprendre qu'il developpe aussi une extension à eclipse pour programmer directement le jeu a l'aide de la plateforme de dev.

    Actuellent Radons labs le developpe en partie pour son futur jeu Schwarzenberg.

    Qu'est ce qu'il manque : une adresse
    http://www.radonlabs.de(...)
    une autre adresse le moteur open source. http://nebuladevice.cubik.org/(...)
  • # irrlicht et raydium

    Posté par  (site web personnel) . Évalué à 2.

    Ça à l'air très prometteur comme moteur 3D :
    http://irrlicht.sourceforge.net/(...)

    Autrement, vu à la linux party à Nantes, raydium, un projet francophone (nantais ?), ça à l'air sympa :
    http://raydium.yoopla.org/wiki/Raydium(...)
  • # OpenGL c'est bon mangez-en

    Posté par  (site web personnel) . Évalué à 1.

    Bon ce que je vais dire a déjà été plus ou moins dit plus haut.

    OpenGL doit plutôt être comparé à Direct3D qu'à DirectX. Si tu veux l'équivalent de ce dernier tu devras faire du OpenGL + SDL. Ca peut te paraître bizarre toi qui est habitué à une API qui fait tout, mais le duo OGL/SDL marche vraiment pas mal du tout, et c'est ce qui est souvent utilisé pour les jeux pros portés sous GNU/Linux. Je ne peux que t'encourager à essayer : j'espère que tu ne seras pas déçu. Persévères, tu verras ces 2 API sont vraiment bien faites; et pour ne rien gacher sont trés portables.Pour finir je trouve que le choix du C pour OGL me parait pertinent, notamment avec la facilité de faire des wraps pour à peu prés tous les langages existants.

    Personellemnt je pense que le choix du C++ pour faire un jeu 3D est un trés bon choix, mais il n'y a vraiment aucun problème à utiliser des API en C : tout aussi objet que soit l'API de DirectX, on fini toujours par la wrapper de toute les façons. Et wrapper OGL n'est pas franchement plus dur. D'ailleurs voici un lien vers une série d'articles qui montre comment faire un moteur 3D qui utilise indifféremment OGL ou Direct3D. L'auteur aborde le fait que OGL ne soit pas orienté objet, mais que ca ne pose pas de réel problème :
    http://loulou.developpez.com/tutoriels/moteur3d/(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.