Jeux Libres
       
           

» Les Forums » Aide à propos de la création de jeux vidéo » [C++] Lo reprend ses tutos!


Aller à la page : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.

[C++] Lo reprend ses tutos!
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 30 Juin 2014, 13:30             Message non corrigé

Cette fois, j'ai trouvé!
En fait ce n'était pas si bien compliqué en regardant l'image suivante :


Premièrement il faut trouvé dans quel région se trouve le point, pour cela, il suffit de calculer le produit scalaire entre v1 et les normales, si le produit scalaire est >= 0 ça veut dire qu'on est du bon côté, ensuite on calcule le signe des 2 angles orientés entre v1 et les 2 diagonales des côté des triangles, si les angles orienté sont de signe différent, et que le produit scalaire est >= 0 ça veut dire que on a trouvé dans quel région on est.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Vec3f v = axis - center;
       bool found = false;
       Vec3f v1, v2, n;
       for (int i = 0; i < vertices.size() && !found; i++) {
           v1 = vertices[i] - center;
           v2 = vertices[(i+1 == vertices.size()) ? 0 : i + 1] - center;
           float angle1 = v.getAngleBetween(v1);
           float angle2 = v.getAngleBetween(v2);
           float dp = n.dot(v);
           if (dp >= 0 && (angle1 <= 0 && angle2 > 0 || angle1 > 0 && angle2 <= 0)) {
               found = true;
               n = normals[i] - center;
           }
       }

Ensuite il ne nous reste plus qu'à projeter le vecteur v1 sur la normale de la région dans laquelle se trouve l poins p.

Ensuite ont peut trouvé l'intersection grâce au théorème de thalès :
1
2
3
4
float max = v.magnitude();
       float p = v.projOnAxis(n);
       float ratio = n.magnitude() / p;
       float min = max - v.magnitude() * ratio;

Et la distance entre le centre et l'intersection vaut max - min.

Logiquement ça marche aussi pour la 3D en projetant v sur la normale de la face du polygone.

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
Brouilles



Grade : Habitué
Inscrit le: 04 Fev 2012, 17:40
Ecrit le: 30 Juin 2014, 15:00             Message non corrigé

Bonjour,
Le tutoriel me parait intéressant mais je me pose une question, le code du moteur est t-il openSource ?
Si oui y aura t-il un Dépôt github ou autre ? Ou sinon qu'elle est la licence de ton moteur ?  
Cordialement Brouilles.

________
Site personnel et Portfolio.
  Profil
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 30 Juin 2014, 15:18             Message non corrigé

Re :

Le code source du moteur sera opensource et est en licence GNU GPL : http://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU

Il y a un moteur réseau qui mesure le ping moyen des clients côté serveur, et qui permet d'envoyer et de recevoir des messages sur le réseau de manière assynchrone et d'établir des connexions sécurisées ou non entre le serveur et les clients.

Il y a aussi un moteur physique qui calcule les collisions entre différentes formes, rayons et points ainsi que un moteur de particule.

Il y a aussi un système d'entités ou chaque entité pourra être redécomposée en plusieurs sous entités. (Et à chaque sous entités on pourra définir un volume de collision afin de former un système de détection de collision hiérarchique, ou encore des animations squelettique)

Il y a un gestionnaire d'entité qui pourra remettre à jour les entités et les stocké dans le monde afin de rechercher les entités qui se trouvent dans une zone. (Sélection d'entités)

Il y a aussi un gestionnaire de composants dessiner les entités et effectuer du "multipass-rendering".

Il y a également un système de gestion de ressources, ainsi que un système de gestion des actions.

Il y a également un système de states. (Utile au cas ou on a pleins d'armes et de personnages de classes différentes)

Et j'en passe..., bref, c'est vraiment un gros moteur et je dois remettre à jour les sources sur le répertoire git-hub d'ici pas longtemps, à vrai dire j'ai presque fini le moteur là je suis entrain de le mettre au point et de réaliser une petite démo en 2D isométrique.

Le tutoriel portera surtout sur comment utiliser le moteur de jeux et je finirai par commenter le code source de la démo.

Mais le code source de mon jeux (Sorrok) par contre ne sera pas opensource. (Juste les codes sources des démos le seront)

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 07 Juillet 2014, 20:49             Message non corrigé

Salut, en attendant la fin des tutos. (Ici je dois encore faire l'IA en réseau et après se sera terminé.)

Voici un lien vers le répertoire git-hub du moteur : Cliquez ici!

Vous pouvez modifier le code source mais la license oblige à me faire part des bugs rencontrés/corrigés ou bien des fonctionnalités rajoutées.





________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 09 Juillet 2014, 08:34             Message non corrigé

Salut, en attendant que je finisse l'IA pour mes tutos, vous pouvez toujours aller voir mon devblog : Ici

Là je viens d'écrire un article (en Anglais) sur les déplacements en réseaux, mais j'en ai aussi écris quelque un sur les collisions et sur la structure de mon moteur de jeux.


________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 16 Juillet 2014, 13:33             Message non corrigé

Salut!

Voici une vidéo qui montre ce que vous pourrez faire par la suite. (Ici il s'agit de déplacer un personnage en réseau)
Ici!

Il ne me reste plus qu'une IA a faire et quelques monstres à intégrer et ça sera tout pour la partie 2D.

J'ai essayé de faire fonctionner opengl3 sur linux pour cela que j'ai perdu un peu de temps mais les drivers opensource ne sont pas encore très stable sur linux (j'ai pleins de messages d'erreurs d'opengl et j'ai du mal à avoir un scène qui s'affiche, la plupart du temps j'ai un écran noir hors que avec opengl  (jusqu'à la version 3.0) ça marche sans soucis.

Les drivers propriétaires me donnent un écran noir à la place de l'écran de login, je ne peux donc pas les installer non plus.

Ha oui il y a aussi le système de collision que je dois encore "paufiner" un petit peu..., pour combiner les algorithmes de détection de collision et de pathfinding.

Bref ceci clôturera la fin de mon 1er jeux, je comptes ensuite m'attaquer aux graphismes et au site webs l'année prochaine. (Car il me faut un site web, une boutique en ligne et tout ça.)

________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 20 Juillet 2014, 08:28             Message non corrigé

Voilà je viens de terminé le système de collision :

Ici.

J'attaque donc la dernière phase qui concerne l'intelligence artificielle.

Et ensuite je termine les tutoriels. (qui porteront surtout sur l'utilisation du moteur, pour la conception du moteur, se sera sur mon devblog que j'expliquerai comme j'ai fais pour ceux qui seraient intéressé par la partie plus technique.)



________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 29 Juillet 2014, 22:19             Message non corrigé

Bonjour, je viens de finir de mettre au point un système simple de sérialization :

http://laurentduroisin.wordpress.com/

Je n'ai plus qu'à l'adapter avec les différentes classes "entités" de mon framework, ensuite j'attaque l'IA. (Car se sera plus simple d'envoyer toutes les informations sur les monstres au chargement de la map.)

Il faut savoir que les entités de ODFAEG sont assez complexe j'ai déjà essayé de les sérialiser avec boost avant de les envoyer du serveur vers le client mais ça n'a pas fonctionné et comme cette librairie est quand même assez grosse j'ai décidé de faire un système plus simple.



________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
Lo



Grade : Maître
Inscrit le: 26 Dec 2007, 17:33
Ecrit le: 12 Août 2014, 14:50             Message non corrigé

Salut!

Je vais recommencer à rédiger mes tutos!!!

J'en ai enfin terminé avec la sérialization et j'en ai profiter pour inclure également un algorithme de compression dans mes archives!!!

Du coup pour une image de 50*100 (800k.o en .png) ce qui me fait 4MO en format BMP, au lieu d'avoir un fichier texte de 4M.O dans lequel se trouvent toutes les informations sur l'image sérializée, je me retrouve avec un fichier de seulement 14 octets!!!

Donc je peux très facilement envoyer des images sur le réseau ou bien les sauvegarde dans un fichier et ce de manière très rapide.

C'est la nouveauté dont je vais parler dans les tutoriels, le reste va reprendre beaucoup de chose dont j'ai déjà discuté auparavant.

Pour la compression j'ai repris cet algorithme :
Ici



________
Parce qu'on ne peut s'exprimer que par nos créations. ^^
  Profil
David



Grade : Maître
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 12 Août 2014, 17:52             Message non corrigé

Il m'a l'air bien cet algorithme de compression. Je viens de tester la compression de la chaine suivante :
POSITION_JOUEURS 19.5465 564.56456 98.624 65.3665 324.46955 244.34868

Et j'obtiens 19 octets en sortie.

Par contre, je ne comprend pas, avec la chaine suivant :
PJ 19.5465 564.56456 98.624 65.3665 324.46955 244.34868

Jobtiens 57 octets en sortie. (3 fois plus grand, et plus grand que la chaine de départ)

J'utilise des chaines "codées" en UTF-8, peut-être que c'est pas bien. J'aimerais utiliser cet algorithme pour réduire la taille des messages sur le réseau et éventuellement envoyer des BMP de map en un coup. J'utilise l'ASCII pour pouvoir déboguer plus facilement qu'en binaire. Par contre, j'ai l'impression que la taille compressée est vraiment imprévisible.

En tout cas, merci pour ce partage.

________
Apprenez à créer votre propre FPS en C++ avec OpenGL. C'est pas dur ! :-)
  Profil
 


Aller à la page : 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11.


Hébergeur du site : David
Version PHP : 5.4.45-0+deb7u2
Uptime : 206 jours 16 heures 46 minutes
Espace libre : 1561 Mo
Dernière sauvegarde : 18/06/2019
Taille de la sauvegarde : 1113 Mo


5294574 pages ont été consultées sur le site !
Dont 2106 pages pendant les 24 dernières heures.

Page générée en 0.875 secondes


Nos sites préférés
- Création d'un jeu de plateforme de A à Z avec SDL
- Zelda ROTH : Jeux amateurs sur le thème de Zelda
- Zeste de Savoir : la connaissance pour tous et sans pépins
- YunoHost : s'héberger soi-même en toute simplicité
- Site de Fvirtman : recueil de projets et de codes en C et C++
- Par ici la sortie : le site des idées de sorties


  © 2005-2019 linor.fr - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.