Jeux Libres
       
           

» Les Forums » Aide à propos de la création de jeux vidéo » [C++] questiont important


Aller à la page : 1.

[C++] questiont important
ben



Grade : Débutant
Inscrit le: 25 Sept 2011, 20:10
Ecrit le: 25 Sept 2011, 20:34             Message non corrigé

bonjour a tous,
voila j'ai deux trois questions:
est-ce que avec le tutoriel de créer un fps a-z ont peut avoire une arme et tirer avec comme dans les jeu en ligne fps?

Deuxième questions comment fait-ton pour mettre une arme qui tire dans son jeu?

Voila je vous remercies de me répondre ;)

________
Qui tente rien a rien ;)
  Profil
David



Grade : Maître
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 27 Sept 2011, 22:33             Message non corrigé

Il faut passer par la 2D pour ajouter l'arme.
Pour ce qui est du teste de collision avec la balle et l'ennemie, il faut dessiner la scène sans les personnes, puis une seconde fois avec les personnage. Si entre les deux la valeur du z-buffer est modifié, alors l'ennemi est touché.

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



Grade : Débutant
Inscrit le: 25 Sept 2011, 20:10
Ecrit le: 28 Sept 2011, 16:33             Message non corrigé

bonjour,
ok mes y a un code pour insérer l'arme dans le jeu?
Et pour les tire est mort de personnage y a un programme ou code spécial si oui je vous remercies de me le dire :)?
je vous remercies de me répondre ;)

________
Qui tente rien a rien ;)
  Profil
David



Grade : Maître
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 28 Sept 2011, 22:18             Message non corrigé

Alala, il est tenace le gars ! :D


Je l'ai fait sur une version de teste (celle de la vidéo).
Mais dans la version présentée dans le tutoriel, je ne l'ai pas encore fait.

Voici la méthode dessiner3D() que j'ai faite pour vérifier si un pixel été affecté par le dessin de l'objet à l'écran.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool8 Objet3DStatique::dessiner3D(GLint x, GLint y)
{
   // Fonction : Dessine l'objet a l'ecran et retourne TRUE ssi le dessin de l'objet affecte le point
   GLfloat distancePointAvant, distancePointApres;
 
   // Mesure la distance du point
   glReadPixels (x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &distancePointAvant);
 
   // Dessin de l'objet
   this->dessiner3D();
 
   // Remesure la distance du point
   glReadPixels (x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &distancePointApres);
 
   // Retourne TRUE ssi la distance du point a ete modifier pendant le dessin de l'objet
   return distancePointAvant != distancePointApres;
}

La méthode Objet3DStatique::dessiner3D(void) dessine réellement l'objet à l'écran. La méthode Objet3DStatique::dessiner3D(GLint x, GLint y), quant à elle, dessine également l'objet à l'écran, mais en plus, elle retourne TRUE ou FALSE si le pixel spécifié en paramètre par x et y est affecté par le dessin de l'objet.

Comment ça marche ?



Pour dessiner ou pas un objet en fonction de s'il est caché ou par par un autre objet, la carte graphique possède un tampon de profondeur. Ce tampon contient la distance de chacun des pixels que tu vois à l'écran. Pour obtenir la valeur du tampon de profondeur pour le pixel (x;y), j'appelle la primitive glReadPixels() avec les paramètres qui vont bien (voir la doc d'OpenGL).

En comparant la profondeur du pixel avant et après le dessin de l'objet, je détermine si, oui ou non, un objet a été dessiné sur ce pixel. Si c'est le cas du pixel vidé par l'arme, alors l'objet (ou personnage) est bien visé.

Pour les geek :
L'appel à la primitive glReadPixels() nécessite que toutes la pipeline d'OpenGL soit finit d'être exécutée.
C'est inévitable, forcément. Par conséquente, il est possible que cette fonction mette du temps avant de donner une réponse. C'est pour cela qu'il est important de bien comprendre le fonctionnement des échanges entre CPU et carte graphique pour concevoir ton jeu en conséquence. Il est plus judicieux de faire [dessin de la scène, traitement du réseau, dessin des personnages] que de faire [dessin de la scène et des personnages, traitement du réseau]. En effet, le temps de dessin des personnages avec le test de tir sera beaucoup plus court si le reste de ta scène est déjà dessiné. Donc autant que le CPU traite du réseau pendant que la carte graphique termine le début de son dessin. Ainsi, elle sera prête à répondre lors du test de tir : la fonction glReadPixels() te redonnera la main immédiatement.


Et pour ce qui est de l'arme, tout est expliqué dans ce sujet : De la 2D dans de la 3D.

Si y a un truc que j'explique mal, redemande moi. ;-)

A bientôt.

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



Grade : Débutant
Inscrit le: 25 Sept 2011, 20:10
Ecrit le: 29 Sept 2011, 17:50             Message non corrigé

oui ok mes le opengl ont dit qu'il est sur son pc mes moi je le voie pas?

________
Qui tente rien a rien ;)
  Profil
David



Grade : Maître
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 29 Sept 2011, 22:06             Message non corrigé

Normalement OpenGL est déjà installé sur ton PC.
Pour le vérifier, lance un programme qui utilise OpenGL, et vérifie qu'il fonctionne.

Tu dois théoriquement être en mesure que suivre la procédure de création d'un projet OpenGL.



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


Aller à la page : 1.


Hébergeur du site : David
Version PHP : 5.4.45-0+deb7u2
Uptime : 60 jours 7 heures 42 minutes
Espace libre : 1484 Mo
Dernière sauvegarde : 03/04/2020
Taille de la sauvegarde : 1113 Mo


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

Page générée en 1.832 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-2020 linor.fr - Toute reproduction totale ou partielle du contenu de ce site est strictement interdite.