Jeux Libres
       
           

» Les Forums » Aide à propos de la création de jeux vidéo » problème de skybox


Aller à la page : 1, 2.

problème de skybox
kjohn



Grade : Membre accepté
Inscrit le: 07 Fev 2015, 08:30
Ecrit le: 07 Fev 2015, 08:37             Message non corrigé

Bonjour,

 Je reprends un problème déjà évoqué au sujet de la skybox :

"j'ai un petit souci avec la skybox.le code me retourne des erreurs au niveau des images spécifiées dans skybox.m3s
{
couldn't open /skybox/haut.bmp
couldn't open /skybox/bas.bmp
........
.....
}
du coup je peux continuer à créer des obstacles et tout sauf que la skybox et toute blanche!!"

J'ai exactement le même problème et je suis sous ubuntu . J'ai modifié le fichier skybox.ms3 sans succès. Pouvez-vous apporter une solution svp?


Félicitations : votre site est très bien fait et c'est le seul qui apporte vraiment des connaissances concrètes pour la création d'un jeu vidéo.

Cordialement!
  Profil
David



Grade : Maître
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 07 Fev 2015, 09:19             Message non corrigé

Bonjour kjohn,

J'ai 3 pistes à te proposer :

1) Le chemin dexécution n'est peut-être pas celui qui contient directement l'exécutable. Essaye de lancer l'exécutable directement en double-cliquant dessus. Si ça marche, il faudra revoir dans ton IDE le chemin d'exécution.

2) Vérifie également que le dossier skybox soit à côté de l'exécutable et que celui-ci contient bien les 6 textures de la skybox.

3) Essai de remplacer "/skybox/haut.bmp" par "skybox/haut.bmp" (j'ai enlevé le premier '/') dans le fichier m3s. J'ai peut-être fait une erreur dans le fichier M3S.

Merci de me tenir au courant. ;-)

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



Grade : Membre accepté
Inscrit le: 07 Fev 2015, 08:30
Ecrit le: 07 Fev 2015, 18:22             Message non corrigé

Bonjour,

Merci pour la rapidité de la réponse. J'ai fait toutes les modifications possibles sur le fichier m3s, j'ai utilisé Codeblock et arrangé le fichier du projet en fonction des librairies installés sur ubuntu et j'ai aussi essayé avec un makefile que voici

#OBJS specifies which files to compile as part of the project
OBJS = *.cpp

#CC specifies which compiler we're using
CC = g++

#COMPILER_FLAGS specifies the additional compilation options we're using
# -w suppresses all warnings
COMPILER_FLAGS = -w

#LINKER_FLAGS specifies the libraries we're linking against
LINKER_FLAGS = -lGL -lGLU -lglut -lSDL -lSDL_image

#OBJ_NAME specifies the name of our exectuable
OBJ_NAME = test

#This is the target that compiles our executable
all : $(OBJS)
$(CC) $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)

mais je n'obtiens toujours rien.
  Profil
David



Grade : Maître
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 09 Fev 2015, 08:22             Message non corrigé

As-tu vérifié que les textures étaient bien là ?

Ça m'embête ce problème.

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



Grade : Membre accepté
Inscrit le: 07 Fev 2015, 08:30
Ecrit le: 11 Fev 2015, 05:21             Message non corrigé

Oui les textures sont belles et bien présentes.
  Profil
David



Grade : Maître
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 11 Fev 2015, 11:01             Message non corrigé

Je viens de compiler le projet Jeu_09.zip sous Ubuntu 14.10.

Pour ceux que ça intéresse, j'ai d'abord commencé par installer Code::Blocks et les bibliothèques necessaires :
sudo apt-get install codeblocks
sudo apt-get install build-essential
sudo apt-get install libsdl1.2-dev
sudo apt-get install libsdl-ttf2.0-dev

Ensuite j'ai ouvert le projet contenu dans Jeu_09.zip avec Code::Blocks, puis dans l'éditeur de liens, j'ai mis ceci :
-lSDLmain
-lSDL
-lGL
-lGLU
-lSDL_ttf

Après compilation et exécution, j'ai obtenu ceci :


Effectivement, la skybox s'affiche en blanc.

Après investigation, il s'avère qu'il y a deux erreurs :

La première erreur, dans objet3DStatique.cpp, ligne 37, on a l'instruction suivante :
1
nomFichierTexture.assign(ligne.begin() + 6, ligne.end());

Cette instruction a pour but de recupérer le nom du fichier dans la ligne. Or dans les faits, cette instruction recupère également le '\r' situé immédiatement derrière. Les distributions de linux y sont sensible.

Pour corriger ce premier problème, je propose donc d'ajouter #include <algorithm> en haut du fichier objet3DStatique.cpp et de corriger comme ceci :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
            else if (0 == ligne.compare(0, 6, "image "))
           {
               // Lecture du nom de fichier de la texture
               std::string nomFichierTexture;
               nomFichierTexture.assign(ligne.begin() + 6, ligne.end());
 
               // Apport de correction
               nomFichierTexture.erase(std::find_if(nomFichierTexture.rbegin(),
                                       nomFichierTexture.rend(),
                                       std::not1(std::ptr_fun<int, int>(std::isspace))).base(),
                                       nomFichierTexture.end() );
 
               // Si la texture n'est pas deja creee
               if(this->textures.find(nomFichierTexture) == this->textures.end())
               {
                   this->conteneurTextures.ajouter(nomFichierTexture);
                   this->textures.insert(nomFichierTexture);
               }
 
               // Cette texture devient la texture courante
               textureCourante = nomFichierTexture;
           }

Le second problème, c'est que les distributions de linux demandent l'utilisation du caractère '/' dans le chemin, or j'ai mis des '\' dans le fichier skybox.m3s et je n'ai pas apporté de correction dans le programme.

A ce problème, je propose d'ajouter cette deuxième correction :
1
2
3
#ifndef _WIN32
std::replace( nomFichierTexture.begin(), nomFichierTexture.end(), '\\', '/');
#endif

Et voici le résultat :


Personnellement, je trouve que ces corrections ne font pas très propre, surtout la première. Si vous avez mieux à proposer, je suis preneur. Ainsi je pourrais apporter une correction au tutoriel.

Autres bugs rencontrés :



  • Je remarque également que le bouton "Quitter" ne fonctionne pas. Pour le moment je n'ai aucune piste.
  • Les touches Z Q S D ne correspondent pas. Il faut utiliser les touche A W S D. Je regarderai ça de plus prêt.


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



Grade : Membre accepté
Inscrit le: 07 Fev 2015, 08:30
Ecrit le: 12 Fev 2015, 04:40             Message non corrigé

UN GRAND MERCI POUR TON AIDE! BRAVO!
  Profil
kjohn



Grade : Membre accepté
Inscrit le: 07 Fev 2015, 08:30
Ecrit le: 13 Fev 2015, 13:21             Message non corrigé

Bonjour,

J'habite en Amérique du nord et  j'utilise un clavier qwerty : je ne rencontre donc pas le problème de touche de clavier azerty avec SDL sous Ubuntu. Voici peut- être une solution :

http://codes-sources.commentcamarche.net/source/50130-qwerty-azerty-avec-sdl-une-alternative



  Profil
David



Grade : Maître
Inscrit le: 11 Mai 2005, 20:30
Ecrit le: 13 Fev 2015, 15:54             Message non corrigé

Merci kjohn pour ce retour. Chez moi AZERTY, ça pose problème.

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



Grade : Membre accepté
Inscrit le: 07 Fev 2015, 08:30
Ecrit le: 16 Fev 2015, 04:33             Message non corrigé

Bonjour,

Peut-être une piste pour le problème de menu avec le bouton "quitter" qui ne fonctionne pas. J'ai ajouté ceci  dans la méthode " void Jeu::executer(void)" du fichier jeu.cpp :

void Jeu::executer(void)
{
   // Creation de la fenetre avec SDL
   this->initSDL();

   // Generation des codes de bouton
   enum {BOUTON_JOUER, BOUTON_QUITTER};

   // Création du menu
   Menu menu1("fond_menu.bmp");                                            ------ ajout
   Menu menu2("fond_menu.bmp");                                            ------ ajout    
   menu1.ajouterBouton("Jouer", LARGEUR_FENETRE/2, 200, BOUTON_JOUER);     ------ ajout
   menu2.ajouterBouton("Quitter", LARGEUR_FENETRE/2, 300, BOUTON_QUITTER); ------ ajout

   // Boucle d'exécution du jeu
   bool8 continuer = TRUE;
   while(continuer)
   {
       // Affichage du menu
       menu1.dessiner();  ------ ajout
menu2.dessiner();  ------ ajout
       ..........

Problème : les boutons clignotent mais ils fonctionnent... je continue à tenter de trouver une solution.
  Profil
 


Aller à la page : 1, 2.


Hébergeur du site : David
Version PHP : 5.4.45-0+deb7u2
Uptime : 16 jours 6 heures 4 minutes
Espace libre : 1599 Mo
Dernière sauvegarde : 09/12/2018
Taille de la sauvegarde : 1109 Mo


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

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