bonjour, je suis en train de réaliser un moteur 3d pour un jeu et je bloque sur un petit point:
j'ai fait un module de chargement de model (ASE) que je stocke dans des vecteurs de <model> a l'initialisation, juste apres celle ci, aucun probleme, les models sont contenu mais plus tard quand j'essaille d'y acceder (pour le rendu par exemple)
quand j'y accede par
ml::model_loader.mod.size(), il me dit qu'il en contient 0
/*
model_loader.h
sert a charger des fichier de model 3D (format .ASE)
et les transforme en entité affichable sous opengl
#include "model_loader.h"
#include <string.h>
#include
using namespace std;
/*
permet de charger des models 3d au format ASE
*/
ml::model::model(char *nom)
{
charger(nom);
}
ml::model::model()
{
}
void ml::model::charger(char *nom)
{
int nbre=0;
char tmp[14];
fichier = fopen(nom, "r");
if (fichier==NULL) return;
//compte le nombre d'elements
while(fgets(tmp, 14, fichier) != NULL)
if (!strcmp(tmp, "*GEOMOBJECT {"))
nbre++;
//nbre contient le nombre d'elements
if (nbre == 0) return;
for (int i=1; i<=nbre; i++)
{
element t;
t.charger(fichier, i);
elt.push_back(t);
}
fclose(fichier);
}
void ml::model::afficher()
{
for (int i=0; i<elt.size(); i++)
elt[i].afficher();
}
//lit les vertex sur les textures
int n_tvertex;
while(strcmp(fgets(tmp, 20, fichier), "\t\t*MESH_NUMTVERTEX "));
fgets(tmp, 10, fichier);
n_tvertex=atoi(tmp);
fgets(tamp, 200, fichier);
void ml::element::afficher()
{
for (int i=0; i<faces.size(); i++)
afficherface(i);
}
void ml::element::afficherface(int i)
{
face f = {faces[i].A, faces[i].B, faces[i].C};
v3d v[3];
v[0]= vertex[f.A];
v[1]= vertex[f.B];
v[2]= vertex[f.C];
//a completer pour les textures
glBegin(GL_TRIANGLES);
glColor3ub(0,0,255); //face bleu
glVertex3d(v[0].x, v[0].y, v[0].z);
glVertex3d(v[1].x, v[1].y, v[1].z);
glVertex3d(v[2].x, v[2].y, v[2].z);
glEnd();
}
le main de test:
using namespace ml;
int main(int argc, char *argv[])
{
model m;
m.charger("models/maison.ASE");
model_loader::mod.push_back(m);
cout <<model_loader::mod.size(); //ici pas de probleme il m'affiche 1
ogl g;
g.boucle_affiche();
return 0;
}
et la fonction qui devrait afficher le model:
void ogl::boucle_affiche()
{
last_time = SDL_GetTicks();
for (;;)
{
start_time = SDL_GetTicks();
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
exit(0);
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_p:
takeScreenshot("test.bmp");
break;
}
}
}
cout <<model_loader::mod.size(); //le probleme se trouve ici
//a la ligne du dessus je devrais avoir 1 (le model chargé) mais il me dit que le vecteur est vide
bon personne ne voit d'ou vient le probleme?
J'ai essayé de triturrer ça dans tous les sens, par exemple en
mettant static vector<model> mod; sirectement dans le namespace ml et en l'appellant par
ml::mod... mais le resultat est le même, après l'initialisation le vecteur est correctement rempli mais plus tard lorsque j'en ai besoin, ses compostans sont inexistants.