Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Jeux vidéo] Sorrok online.

Futur jeux en ligne développé en c++.

    16 janvier 2021 à 16:43:36

    Bon, l'éditeur de map avance bien et je pense pouvoir créer un jeux tout seul si je trouve les graphismes et sons sur Internet, et si je trouve des idées pour le gameplay (sort, quêtes, monsters, objets, etc...),  et si j'en ai la motivation.

    Je ne pense pas pouvoir vendre le moteur parce que il existe de nombreux moteurs open source  alors je vais partir plutôt sur la création d'un jeux avec le moteur pour promouvoir le moteur.

    EDIT : j'ai téléchargé les source de holyspirit mais je ne trouve pas les murs et autres graphismes.

    -
    Edité par OmbreNoire 16 janvier 2021 à 17:04:11

    • Partager sur Facebook
    • Partager sur Twitter
      18 janvier 2021 à 20:21:21

      Salut, j'aimerais recruter un développeur pour passer le moteur à vulkan, mais sans supprimer la possibilité d'utiliser opengl et sans changer l'architecture du moteur, il faudra peut être par contre rajouter des interfaces pour les classes Shader, Texture, RenderTexture, etc..., avec une implémentation pour vulkan, si expérience dans le multithreading c'est un plus.

      Je n'ai pas le temps de le faire moi même car je dois finir l'éditeur de map et créer le jeux, donc au lieu de perdre un an à implémenter ça, je préfère rechercher quelqu'un pour le faire en parallèle ça me fera gagner du temps.

      Je ne pense pas pouvoir trouver cette personne ici mais je tente quand même, on ne sait jamais. (Si personne d'intéressé c'est pas grave je continuerai à utiliser opengl en fin du moins, jusqu'à ce qu'il disparaisse mais je ne pense pas que ça va disparaitre après 30 ans d'existence)

      -
      Edité par OmbreNoire 18 janvier 2021 à 21:02:47

      • Partager sur Facebook
      • Partager sur Twitter
        19 janvier 2021 à 9:45:58

        OmbreNoire a écrit:

        Je n'ai pas le temps de le faire moi même car je dois finir l'éditeur de map et créer le jeux, donc au lieu de perdre un an à implémenter ça, je préfère rechercher quelqu'un pour le faire en parallèle ça me fera gagner du temps.

        T'es quand même conscient que tu risques pas d'attirer des personnes à bosser avec toi en leur disant que c'est pour faire un boulot pour lequel t'as pas de temps à perdre, et qu'au final si y a personne pour le faire, c'est pas grave.

        • Partager sur Facebook
        • Partager sur Twitter
          19 janvier 2021 à 18:57:48

          C'est bon j'ai compris, je vais m'y coller, on n'est jamais mieux servi que par soit même, compter sur les autres c'est une erreur sauf si il y a rémunération alors là oui peut être, je vais perdre un an, mais, c'est pas grave.

          Je referais plus cette erreur ou j'étais parti sur un projet et puis un autre m'a rejoins pour au final, quitter l'équipe et critiquer mon projet.

          -
          Edité par OmbreNoire 19 janvier 2021 à 18:59:04

          • Partager sur Facebook
          • Partager sur Twitter
            22 janvier 2021 à 19:28:40

            Je suis entrain d'implémenter Vulkan et j'ai mit des #ifdef VULKAN pour ne pas avoir à installer Vulkan si j'utilise l'implémentation opengl et pour ne pas avoir à changer le code pour openGl, et comme je n'ai pas envie d'implémenter tout d'un coup je laisse des méthodes vides, mais le soucis, c'est qu'il y a des classes qui dépendent d'autre donc je dois redéfinir plusieurs méthodes pour l'implémentation vulkan sinon il me dit qu'il ne trouve pas la fonction et ça va me prendre du temps pour afficher le premier triangle mais je sens que j'y suis presque!

            Par contre j'aurai besoin d'un peu d'aide. 

            -
            Edité par OmbreNoire 22 janvier 2021 à 19:33:24

            • Partager sur Facebook
            • Partager sur Twitter
              22 janvier 2021 à 20:30:52

              Un pattern strategy et des librairies séparées pour chaque implémentation serait plus propre et maintenable.
              • Partager sur Facebook
              • Partager sur Twitter
                6 février 2021 à 19:31:10

                J'arrête le projet, je ne recrute plus, avec le temps, je me suis rendu compte que je ne pourrai jamais concurrencer les grandes société de développement de jeux vidéo à moi tout seul.
                • Partager sur Facebook
                • Partager sur Twitter
                  5 mai 2021 à 14:16:02

                  Je reprend le projet mais juste pour le plaisir pas pour faire de l'argent pour la raison que j'ai cité plus haut.

                  Si quelqu'un veut m'aider à programmer pour le plaisir il est bien sûr le bienvenu, il y a plusieurs choses à faire entre autre l'implémentation du framework pour vulkan, déboguage et optimisation du rendu au raytracing et bien sûr finir ODFAEG Creator, après ça seulement je pense continuer le jeux mais ça ne presse pas car pour l'instant je n'ai pas d'idées pour le gameplay.

                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 mai 2021 à 18:40:09

                    Salut, je recherche en priorité :

                    -Une personne pour développer une implémentation vulkan pour le moteur du jeux, je n'ai pas vraiment le temps de m'occuper de ça.

                    -Une personne pour m'aider à optimiser le moteur de jeux qui est encore trop lent (60 FPS pour afficher des centaines de tiles avec lumières, ombres et réflexion/réfraction)

                    Voilà c'est les deux points critiques, l'implémentation vulkan me permettrait d'avoir un portage sur les plateformes Androïd, chose que je n'ai pas pour l'instant avec l'implémentation opengl parce que j'utilise des fonctions d'opengl pour plateforme PC et pas pour plateforme Androïd ou il faut utiliser egl si je ne me trompe pas et donc, d'autres fonctions, je devrais essayer de faire comme le fait la SFML, c'est à dire définir un fichiers avec des fonctions standard référençant tout es les fonctions opengl suivant la plateforme, mais comme je ne connais pas leur nom surtout que j'utilise des fonctions opengl que la SFML n'utilise pas, ça va être difficile et je ne pense pas que glew référence les fonctions opengl en fonction de la plateforme, sinon la SFML l'utiliserait, bref c'est le problème d'opengl par rapport à Vulkan.

                    -
                    Edité par OmbreNoire 11 mai 2021 à 18:40:34

                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 mai 2021 à 22:18:39

                      Salut! Bon! Je vais m'acharner sur un point critique dès demain, l'optimisation!!!

                      J'ai remarqué que c'était la chose la plus urgente à faire, seul problème, jusqu'à maintenant, je n'ai pas encore trouver comment optimiser tout ça ni pourquoi c'est si lent même avec une carte graphique si puissante. 

                      Je vais essayer de mettre des fonctions en commentaire et voir ainsi quelles sont les fonctions qui ralentissent le plus!

                      Si je me souviens bien j'ai déjà des goulots d'étranglement au niveau du CPU, et au niveau du GPU ce n'est pas très rapide non plus l'affichage j'ai l'impression.

                      Si ce n'est que 60 FPS pour afficher des centaines de tiles (des milliers si je compte le fait que je les affichent plusieurs fois sur des textures de rendu) avec une geforce GTX 1660 super, que va être le FPS en 3D si je dois afficher des millions de triangles ?

                      • Partager sur Facebook
                      • Partager sur Twitter
                        13 mai 2021 à 23:31:59

                        Salut! Bon, je n'ai pas l'impression que je pourrai optimiser beaucoup au niveau du GPU, parce que je passe quand même de 570-600 (CPU) à 60-90 FPS  rien qu'en rajoutant l'affichage. (CPU+GPU)

                        Cependant j'ai vraiment besoin de faire comme cela pour bien tout afficher, la seule chose que je peux tenter de faire encore c'est d'utiliser les "textures bindless) pour réduire le nombre d'appel à glDraw, je pense que le problème de performances vient de là parce que j'utilise quand même pas mal de textures différentes. 

                        Bref, une fois ça de fais, je vais continuer à coder le jeux!!!

                        En effet j'en ai marre et j'ai envie d'avancer et je n'ai pas envie d'attendre d'avoir une équipe avant de commencer à coder le gameplay et pour les graphismes je reprendrai ceux du net.

                        Donc prochainement je vais faire un post avec le gameplay je vais faire la description des sorts, des quêtes, des objets et de l'équipement et après je vais implémenter ça dans le jeux, en effet, je n'ai plus grand chose à faire au niveau du moteur de jeux et de l'éditeur de map qui sont pratiquement fini. 

                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 mai 2021 à 9:09:29

                          Salut! Je recherche une personne pouvant m'aider à implémenter le système suivant :

                          J'ai réfléchi et je pense que la meilleure solution même si ce n'est pas la plus courte pour transférer les données du jeux entre le site web (en html) et le serveur de jeux (en c++) c'est d'implémenter un système comme JEE (parce que ça n'existe pas en c++ il n'y a que certaines bibliothèques pour récupérer le contenu des requêtes get et post mais pas pour insérer du contenu de variables dans une page html comme le font les jsp.

                          Maintenant je pourrais faire ça à la main mais ça serait plus propre je pense d'utiliser un système MVC, comme en JEE, afin de ne pas avoir à modifier le code si :

                          -Le format de fichier change, le c++ est un langage générique et donc qui me permet de ne pas avoir à changer le code source si j'insère de nouvelles données (pointeurs, objets polymorphiques, etc...) dans un fichier grâce à mon système de sérialisation, il faut juste insérer la nouvelle variable dans le flux et rien faire d'autre.

                          Entity::vtserialize(ar);
                                      ar(name);
                                      ar(classs);
                                      ar(level);
                                      ar(speed);
                                      ar(path);
                                      ar(attack);
                                      ar(range);
                                      ar(attackSpeed);
                                      ar(regenHpSpeed);
                                      ar(alive);
                                      ar(regenHpAmount);
                                      ar(maNouvelleVariable); //Seul endroit ou il faut changer le code source pour lire/écrire lorsque la structure de la classe change!



                          Si je veux utiliser un autre langage que le c++ (par exemple du html/php ou encore JEE) pour afficher les données sur une pages web, le code source pour lire/écrire les données dans le fichier change parce que les autres langages n'utilisent pas forcément de pointeurs, de templates ou autre je ne sais donc même pas si je pourrai faire un système de sérialisation générique comme en c++ parce que pour ça il faudrait que je puisse appeler la bonne fonction template de sérialisation si le type est polymorphique en vérifiant le type à l'éxécution comme par exemple comme je le fais en c++, et aussi, si le langage n'utilise pas template je vais devoir créer une fonction pour lire et écrire chaque type primitif différents.

                          En même temps j'aurais pu utiliser l'héritage et une fonction de sérialisation non template seulement boost utilise une fonction template pour passer l'archive à sérialiser, j'ai donc tout bêtement refais le même système que boost qui ne fonctionnait pas donc j'ai dû le recoder.

                          Hors je veux que le moteur de jeux soit le plus générique possible pour au final, gagner du temps lors du codage du jeux même si ça prend du temps à implémenter cette généricité et je veux aussi que le moteur incorpore de nouvelles fonctionnalités qui ne sont pas présentent dans un autre moteur de jeux qu'il soit codé en c++ ou en n'importe quel autre language sinon le moteur de jeux ne présentera aucun intérêt de faire mon propre moteur de jeux et comme JEE n'existe pas en c++ je me suis dit c'est une bonne occasion d'implémenter un système similaire en c++ ça permettrait de n'avoir à utiliser que deux langages (c++ et html et quelques expressions pour insérer le contenu des variables dans les pages html.) ce qui fait deux langages et demi on va dire tout en me permettant d'utiliser la généricité et la méta-programmation qu'utilise le c++ et qui n'est pas présente dans d'autres langages (template variadique, etc...) pour faire du développement web.

                          Utiliser les bases de données ne résoudrait pas le problème car il faut modifier la structure de la table lors de l'ajout d'une nouvelle variable

                          Je vais donc utiliser un seul language (le c++) pour transférer et récupérer des données depuis une page html et un pseudo code pour insérer des données dans une page html.

                          Ce qui donnera un truc du genre :

                          class Test : public HttpContainer {
                                private :
                                     HeroDao heroDao;
                                     /*url qui sera passée avec ODFAEGCreator
                                       on pourra créer des contenaires http et des 
                                       C servers pages et ODFAEGCrerator va les 
                                       ajouter à l'application courante qui va se 
                                       charger de transférer les données et 
                                       générer les pages html, il ne faudra même 
                                       pas installer un serveur externe tel que 
                                       tomcat comme en JEE.*/
                                     Test  (std::string url) : HttpContainer(url) {
                                         DaoFactory daoFactory = DaoFactory.getInstance();
                                         this->utilisateurDao = daoFactory.getUtilisateurDao();
                                     }    
                                 protected :    
                                     void doGet(HttpContainerRequest request, HttpContainerResponse response) throws ServletException, IOException {
                                  request.setAttribute("heros", heroDao.lister());
                                  this.getHttpContainerContext().getRequestDispatcher("/WEB-INF/gérerHeros.csp").forward(request, response);
                              }
                              public :
                              void doPost( HttpContainerRequest request, HttpContainerResponse response ) throws ServletException, IOException {
                                  Entity* hero = new Hero();
                                  hero->setNom(request.getParameter("nom"));
                                  hero->setPrenom(request.getParameter("prenom"));
                                  
                                  utilisateurDao.ajouter(hero);
                                  
                                  request.setAttribute("heros", heroDao.lister());
                                  
                                  this->getHttpContainerContext().getRequestDispatcher("/WEB-INF/gérerHeros.csp").forward(request, response);
                              }    
                          };


                          Et au niveau de la csp le code sera similaire à JEE :

                          <!DOCTYPE html>
                          <html>
                          <head>
                          <meta charset="utf-8" />
                          <title>Test</title>
                          </head>
                          <body>
                              <form method="post" action="bonjour">
                                  <p>
                                      <label for="nom">Nom : </label>
                                      <input type="text" name="nom" id="nom" />
                                  </p>
                                  <p>
                                      <label for="prenom">Prénom : </label>
                                      <input type="text" name="prenom" id="prenom" />
                                  </p>
                                  
                                  <input type="submit" />
                              </form>
                              
                              <ul>
                                  <c:forEach var="hero" items="${ heros }">
                                      <li><c:out value="${ hero.prenom }" /> <c:out value="${ hero.nom }" />
                          
                                  </c:forEach>
                              </ul>    
                          </body>
                          </html>

                          Ainsi, en cas de modifiaction de la structure de donnée il ne faudra modifier le code qui lit et écrit dans les fichiers de sérialisation qu'une seule fois (le code du language c++ et pas le code du language c++ et celui d'un autre language pour l'html) ce qui pourrait devenir pénible si on utilise plusieurs systèmes de stockage de données (fichiers, bases de données, etc...)

                          Le reste du code à modifier sera celui de HttpContainer et celui de la csp. (c server page)

                          Je recherche une personne donc pouvant m'aider à implémenter ce système.



                          -
                          Edité par OmbreNoire 16 mai 2021 à 9:11:20

                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 mai 2021 à 11:00:46

                            Une architecture propre pour ce genre de cas nécessiterait de

                            1) Découpler le serveur de la vue afin de garantir que la transaction ne soit pas bloquante, ainsi que pour découpler les cycles de vie des application producer et consumer.

                            2) Utiliser un format de donnée évolutif pour le transfert et la persistence.

                            3) Garantir l'origine et le contenu des données du producer.

                            4) Encrypter le canal de transfert afin de protéger les données privées.

                            5) Pouvoir faire du scaling horizontal pour supporter les montées en charge.

                            Une implémentation possible de ces NFR est d'utiliser un broker entre les 2 applications pour fournir un processus asynchrone et donc non bloquant, un certificat dans le broker pour mettre en place SSL et sécuriser le canal.

                            Un format évolutif naturellement est bien entendu le JSON, il pourra prendre en header un application token, secret, pour garantir l'origine, et une signature pour assurer que le contenu n'a pas été altéré.

                            Coté web, une DB nosql pour recevoir et persister le format générique, et résister aux changements de modèle, et qui serait alimentée via un pattern CQRS afin de tirer parti de la population asynchrone, et assurer le scaling.

                            L'implémentation est triviale, y en a pas pour plus de 4 jours de boulot pour un dev confirmé si tu veux faire ça proprement, 1 jour si c'est fait à l'arrache(donc sans HA, backup, disaster recovery strategy, conteneurisation).

                            Tout ça implique que tu as un serveur pour l'hébergement des services, évidemment, sinon un raspi 4 + hd externe, ça marche très bien aussi.

                            PS: Pour la vue, JEE est clairement overkill, une app single page(angular, vuejs, react... serait plus simple à mettre en place tout en étant plus moderne). 

                            -
                            Edité par P.X.L 16 mai 2021 à 11:02:51

                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 mai 2021 à 15:09:32

                              Ok, sinon, j'ai pensé à utiliser la librairie cURL qui gère le protocole hpps pour les données privées et qui gère également les cookies.

                              Il me suffira de récupérer les données du navigateur, et ensuite de renvoyer la réponse sous forme de format html.

                              Bref, j'en ai pour plusieurs jours ça, c'est certain.

                              -
                              Edité par OmbreNoire 16 mai 2021 à 15:11:11

                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 mai 2021 à 15:33:59

                                C'est pas idéal comme solution:

                                - Ca t'oblige à gérer les certif coté app, c'est pas pratique.

                                - Ca t'oblige à gérer la réception et les mécanisme de retry coté app, pas très solide.

                                - Ca t'empêche de pour faire du scaling horizontal facilement, pas évolutif.

                                - Ca ne protège pas contre les vol de domaine (et vu que Google s'est fait avoir...) et réception des messages par un tier malveillant, pas sécurisé. 

                                - Ca ne permet qu'un seul consumer à la fois et ne peut pas gérer les EIP (routing, transformation du message,...)

                                - Ca couple l'app et l'app web, donc, si le web est down ou change d'adresse, ça ne marche plus.

                                - Ca force l'application a exporter des infos sous un format qu'elle ne devrait même pas connaître, les données et leur représentation visuelle ne doivent pas être liées, sur complexification de l'app, mauvais design.

                                Bref, pas mal de faiblesses dans ce design.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 mai 2021 à 20:03:55

                                  Ha, je ne sais pas du tout de quoi tu parles n'ayant jamais fait de développement web de bas niveau.

                                  Malheureusement il n'y a pas de bibliothèque en c++ pour faire du développement web de haut niveau et gérer tout les problèmes que tu cites la seule librairie que j'ai trouvé c'est curl, la sfml ne gère même pas le protocole https et je ne sais pas du tout comment le navigateur envoie les certifs ni comment communiquer avec pour créer une connexion sécurisée. (Sauf si je crée mon propre navigateur mais ce n'est pas le but) 

                                  Play50hz a écrit:

                                  C'est pas idéal comme solution:

                                  - Ca t'oblige à gérer les certif coté app, c'est pas pratique.

                                  - Ca t'oblige à gérer la réception et les mécanisme de retry coté app, pas très solide.

                                  - Ca t'empêche de pour faire du scaling horizontal facilement, pas évolutif.

                                  - Ca ne protège pas contre les vol de domaine (et vu que Google s'est fait avoir...) et réception des messages par un tier malveillant, pas sécurisé. 

                                  - Ca ne permet qu'un seul consumer à la fois et ne peut pas gérer les EIP (routing, transformation du message,...)

                                  - Ca couple l'app et l'app web, donc, si le web est down ou change d'adresse, ça ne marche plus.

                                  - Ca force l'application a exporter des infos sous un format qu'elle ne devrait même pas connaître, les données et leur représentation visuelle ne doivent pas être liées, sur complexification de l'app, mauvais design.

                                  Bref, pas mal de faiblesses dans ce design.

                                  Je me suis toujours demandé si curl pouvait gérer plusieurs url à la fois, apparemment non puisque ça ne peut gérer qu'un seul consumer à la fois.

                                  gérer les certifs ssl côté app tu veux dire ? (Je ne sais pas du tout comment on fait ça)

                                  Je vois pas ce que c'est les mécanisme de retry, refaire une requête si l'envoi à échoué je suppose.

                                  Le scaling horizontal je ne sais pas ce que c'est.

                                  Le vol de domaine je ne sais pas ce que c'est.

                                  Les EIP je ne sais pas ce que c'est (le routage ça oui (si tu parles du passage par des routeurs)) mais normalement quand l'adresse ip change c'est remit à jour si on utilise un hébergement qui utilise le dns dynamique et en ce qui concerne le routing et la transformation du message, normalement le routeur gère ça non ? Bref je ne comprend pas ce que tu veux dire. 

                                  Sinon, l'app est indépendante de l'app web, si le site web est down le jeux pourra toujours fonctionner.

                                  Sinon oui, l'application doit exporter les données dans un format universel pour le client (le HTML) et faire l'inverse pour les données reçues par le client.



                                  -
                                  Edité par OmbreNoire 16 mai 2021 à 20:19:16

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 mai 2021 à 20:41:03

                                    Ce n'est pas du dev web dont je parle, c'est de l'intégration: la communication entre différents composant d'un écosystème.

                                    Les EIP sont les Enterprise Integration Patterns, une suite de patterns usuel pour résoudre des problématiques d'intégration ( https://www.enterpriseintegrationpatterns.com/ ).

                                    Dans l'intégration on peut distinguer 2 grandes familles de communication: synchrone et asynchrone, la première suppose un principe simple de request - response (qui peut juste être un acknowlegement), async induit que la requête est envoyée à un intermédiaire qui fera suivre, on ne sait quand (typiquement, un broker style rabbitmq, activemq,...).

                                    Ce composant intermédiaire prendra la responsabilité de délivrer le message, de traiter les cas d'erreurs, de faire du routing (envoyer le message vers différentes destinations suivant des conditions, de la transformation du message...)

                                    Le scaling horizontal, c'est pouvoir ajouter des instances d'un composant afin d'ajouter des ressources (logicielles) si la charge monte et éviter les goulots d'étranglement.

                                    Gérer les certificats, c'est à dire les garder dans un endroit sécurisé, et de préférence être alerté quand ils approchent de l'expiration, les certificats gratuits n'ont que quelques mois de durée de validité, si ils sont lié à l'app, ça va vite devenir pénible.

                                    Tout ça pour en arriver au fait que pour faire communiquer des applications ensemble, il y a un certain nombre de problématiques dont il faut tenir compte, et que cUrl ne pourra pas les solutionner.

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      16 mai 2021 à 20:48:55

                                      J'ai peut être trouvé une solution qui est meilleure ici.

                                      Je ne sais pas si Cppcms peut gérer ce genre de problème mais ça me semble être un framework similaire à php, JEE, .NET ou autre donc je pense que ça serait mieux d'utiliser ce genre de design.

                                      EDIT : j'ai regardé un peu les exemples et ça à l'air vraiment pas mal ça correspond à ce que je veux faire sans que je doivent tout coder moi même reste plus qu'à voir si je pourrais l'installer!!!

                                      EDIT1 : ça y est elle est installée!!!

                                      C'est un .lib parce que je l'ai installée avec vcpkg mais il m'a suffit de le convertir en .a en 32bits il n'y a qu'à le renommer et mingw le gère normalement.

                                      -
                                      Edité par OmbreNoire 17 mai 2021 à 0:45:30

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        18 mai 2021 à 0:32:35

                                        Bon je n'arrive qu'à l'installer sur visual studio cette lib car elle dépend de certains lib qui ne compilent que sur visual studio donc je vais devoir faire un projet visual studio pour le serveur web et les autres projets avec mingw car ODFGAEG Creator crash avec visual studio.

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          18 mai 2021 à 8:01:55

                                          J'ai l'impression que tu empile les hacks... Pourquoi ne pas corriger le problème proprement au lieu d'ajouter un hack (2 compilos pour 2 parties différentes du projet) sur lequel tu vas continuer a développer? Ton approche est vouée a se casser la gueule comme un bâtiment sans fondation solides...

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            18 mai 2021 à 8:28:58

                                            Houlà j'ai tout essayé, j'ai essayé de compiler cppcms avec mingw et vcpkg ça ne fonctionne pas j'ai essayé de le compiler avec cmake ça ne fonctionne pas et le plus drôle c'est qu'avec cmake il lui faut une dépendance (STLport) qui n'est pas présente avec vcpkg.

                                            -
                                            Edité par OmbreNoire 18 mai 2021 à 8:29:40

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              18 mai 2021 à 9:30:10

                                              Et ça ne fera qu'empirer, tu ne regardes que le court terme sans te préoccuper des impacts qu'ont une solution, développer une fonctionnalité ne se limite pas à intégrer une lib et écrire du code, d'autant plus pour une application sensée être complexe.

                                              Si tu veux arriver à quelque chose, tu devrais déjà commencer par les bonnes pratiques de base (SOLID, GOF, EIP...), sur de la gestion de projet pour éviter de passer constamment d'un sujet à l'autre, (tu disais vouloir te concentrer sur les perfs, puis maintenant c'est une interface web), sur une chaine de build solide (pour éviter les 'ca ne marche que sur ma machine').

                                              Tant que tu continueras à penser qu'être programmeur, c'est juste écrire du code, la moitié de tes post continueront à être:

                                              "Je vais implémenter la fonctionnalité X"

                                              et l'autre moitié:

                                              "Je n'ai pas pu implémenter X, ça ne marche pas"

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                19 mai 2021 à 17:57:42

                                                Bon je vais continuer dans les optimisations et je viens d'en faire une, j'ai remplacé le vecteur de pointeurs sur les faces dans la classe entity, ainsi plus besoin de faire de l'allocation dynamique de faces lors du chargement des entités. (allocation dynamique = lent)

                                                Et ça à augmenter le FPS un petit peu encore, je suis passé de 60-80 à 80-100 mais il faut encore que j'optimise.

                                                Je dois faire les bindless textures dans tout les composants de rendu, je ne fais plus beaucoup d'appel à draw du coup, seulement un par type de primitive et je peux m'arranger pour utiliser toujours la même si je veux ça ne me ferait plus que un seul draw par FBO! (Ou par composant de rendu si je dois afficher plusieurs couche comme par exemple le sol et puis le reste)

                                                Désormais je n'utilise plus qu'un seul contexte pour toutes mes FBO!

                                                Je vais voir maintenant comment je peux rendre le code meilleur parce que là ce n'est pas très rigoureux.

                                                EDIT : ça corrigera peut être les crashs sous visual studio.

                                                -
                                                Edité par OmbreNoire 19 mai 2021 à 18:58:56

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  23 mai 2021 à 21:54:40

                                                  Bon, j'en ai marre, côté optimisations je suis à sec! Je n'ai plus d'idées pour optimiser ça, je tourne entre 85-105 FPS (60 avant optimisation) maximum en 2D et en 3D entre 50-100 FPS pour afficher des milliers de triangles. (Le sol et un modèle 3D avec 4500 faces) (Mais je dois retirer les objets qui sont dans le rectangle englobant de la caméra mais derrière la caméra et je vais également essayer d'utiliser le backface culling pour optimiser ça)

                                                  Le raytracing est beaucoup trop lent au niveau du GPU même en utilisant un seul thread par rayon et par triangle dans un seul test d'intersection en utilisant l'algorithme de möller trumbore, je pensais pas que ça serait si lent avec ma nouvelle carte graphique. (même si c'est un GTX et pas une RTX) 

                                                  Et je pense que, côté CPU, j'ai des goulots d'étranglements mais je ne sais pas, ou ça coince.

                                                  Je vais finir de modifier les deux composants de rendu qu'il me reste pour utiliser les bindless textures (bien que ça n'a pas l'air de faire monter le FPS pour l'instant) et après ça je commencerai à écrire le gameplay, et créer des maps avec ODFAEGCreator, pour l'instant, je vais utiliser ODFAEGCreator juste pour créer des maps, des quêtes, des objets et des sorts mais pas pour éditer et compiler du code source car j'estime qu'il existe des EDI qui font ça mieux que moi (j'avais commencé à le faire dans ODFAEGCreator pour faire comme dans unity mais j'ai laissé tombé) ce qui me fera trois projets. (le serveur, le client, et le projet ODFAEGCreator)

                                                  Je posterai tout ici au niveau du gameplay, la description des sorts, des quêtes et des objets et puis je n'ai pas encore codé le système pour les équipements, si on peut les upgrader ou les enchanter, etc... je n'ai pas encore coder non plus les sorts de zone et tout ça, je dois encore coder.

                                                  Le jeux n'a donc pas beaucoup avancé côté joueur j'ai plutôt avancé sur le moteur de jeux et sur l'interface graphique pour créer des maps mais là j'en ai marre j'ai envie de coder le jeux! (Même si j'aime bien utiliser opengl et travailler sur ODFAEGCreator, je pense que pour montrer que ce projet devient vraiment sérieux, il faut que j'avance au niveau du gameplay!

                                                  Je dois aussi améliorer l'interface graphique qui permet de créer des objets en utilisant la réflexibilité, en effet je veux pas devoir utiliser des classes standard et à avoir à créer des guis et les modifier si la structure de la classe change! (Ca me fera gagner du temps)

                                                  Et rien ne m'empêche de créer un système de package comme avec unity, mais avec en plus, une interface graphique générée automatiquement pour créer tout les types de "game object" possible.

                                                  Donc je pense que d'ici le début du mois de juin, je commencerai à écrire un gameplay, et à avancer, pour que au moins, ce projet semble avancer et que ce topic de recrutement aie plus de succès!

                                                  -
                                                  Edité par OmbreNoire 23 mai 2021 à 21:56:08

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    26 mai 2021 à 15:34:57

                                                    Premier tutoriel vidéo sur comment utiliser le moteur du jeux pour créer des jeux, ensuite suivrons des tutoriels sur odfaeg creator (l'éditeur de map), il me reste plus qu'à améliorer le code source. Au niveau de ODFAEGCreator je ne vais pas gérer la 3D tout de suite parce que c'est plus compliqué à gérer au niveau gui pour sélectionner des objets en 3D, définir des volumes de collision et tout ça et je n'en ai pas besoin de créer des carte en 3D pour l'instant mais j'ai déjà adapté le moteur de jeux pour gérer la 3D, pour plus tard.

                                                    https://www.youtube.com/watch?v=olvJm9cY9Ds&t=3s

                                                    -
                                                    Edité par OmbreNoire 26 mai 2021 à 15:35:14

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      28 mai 2021 à 3:40:38

                                                      Tu devrais te faire un script quand tu fais tes vidéos et essayer de t'y tenir. Celle ci est remplie de "je préfère faire comme ça par ce que... ben voila quoi" ce qui la rends particulièrement difficile a suivre. Tu donnes l'impression de ne pas maîtriser ton sujet, ce qui lorsque tu es l'auteur du framework est un comble.

                                                      Sinon sur un plan plus technique, cmake est un outil formidable et vu que tu l'utilise déjà pour le framework je te conseillerai d'en faire de même pour tes démos.

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        28 mai 2021 à 21:37:58

                                                        Ok, je vais faire ça.

                                                        On m'a demandé pourquoi je n'utilise pas un moteur de jeux existant, tout simplement parce qu'à l'époque ça n'existait pas, de plus les moteurs de jeux comme unity génère du code que l'on ne voit pas il faut donc suivre des tutoriels pour savoir comment faire pour écrire les scripts pour faire le jeux et traiter des données unique pour chaque jeux. (Par exemple comment passer les données de connexion au serveur et les traiter sachant que Unet le moteur réseau du unity met à jour les données automatiquement pour le déplacement de personnages par exemple)

                                                        Pour créer un mmorpg en 2D isométrique il m'aurait donc fallu tout réapprendre et je n'ai pas vraiment trouvé du tutoriels pour ça, il y en a certes, mais jamais pour le jeux que tu veux faire, de plus je n'ai pas besoin d'un moteur de jeux qui génère du code automatiquement et de toutes les fonctionnalités d'un moteur de jeux comme unity3D ou unreal engine 4 et en plus je déteste travailler avec ce genre de système pour moi juste un éditeur de niveau avec un plugin pour créer tout les objets du gameplay c'est suffisant.

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          31 mai 2021 à 0:16:16

                                                          Bon ça va me prendre plus de temps que prévu car j'ai un crash je dois changer mes std::unique_ptr en std::shared_ptr et virer tout les pointeurs nus, le crash est dû au fait que dans l'éditeur de niveaux, je parcours des pointeurs nus qui ont été delete auparavant, j'ai donc besoin de récupérer des std::shared_ptr pour que, les pointeurs ne soient pas delete lorsque je les parcours dans l'éditeur de map, mais seulement lorsque j'ai fini de les parcourir.

                                                          Le code est casse tête parce que, je sélectionne les nœuds parents et enfants, je les remove de la grille virtuelle mais je ne dois pas les détruire parce que ils sont encore utilisé dans une boucle lorsque je parcours tout les nœuds enfants de la sélection. (donc je ne peut plus utiliser std::unique_ptr)

                                                          C'est seulement à la fin lorsque j'ai parcouru tous les nœuds sélectionné que je dois les détruire. 

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            4 juin 2021 à 0:31:19

                                                            J'ai été ralenti et j'ai buté sur un problème mais ce n'est pas grave parce que l'ancienne implémentation fonctionne c'est juste que la nouvelle est meilleure parce que pas de macros pour définir le nombre max de placeholders donc pas de récursion et pas d'héritage non plus mais voilà je me retrouve avec des valeurs null dans le tuple lors du passage du pointeur this j'ai perdu plusieurs jours mais ici je reprends la création du niveau et des objets du gameplay ainsi que l'écriture du gameplay, ça avance bien.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter

                                                            [Jeux vidéo] Sorrok online.

                                                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                            • Editeur
                                                            • Markdown