IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Blocage de mon Tableau


Sujet :

C++

  1. #1
    Débutant Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 68
    Points
    68
    Par défaut Blocage de mon Tableau
    Salut a tous,

    Je vous expose mon problème :
    Je suis en train de créer un Jeu avec un ami modeleur, est donc j'ai besoin d'importer des *.OBJ, ceci n'est pas vraiment le problème étant donné que j'avais réussi a faire un loader.
    Mais le problème c'est que j'ai du le refaire car il devait a chaque rafraichissement de ma fenêtre relire tous le fichier.
    Je me suis dis qu'il fallait donc que je lise le fichier puis que je mette le tout dans des tableaux "synthèse", et enfin que je dessine le tout grâce a une fonction.

    Mais mon problème est le suivant :
    Lorsque je créais mes tableaux "synthèse" pas de problème, lorsque je met leurs valeur a 0 pas de problème mais que je veux mettre les informations précédemment acquise il plante en atteignant la case 68 (de mes tableaux synthèse).

    Je sais pas si vous allez pouvoir m'aider, et je ne sais pas si j'ai été très clair.

    Je travaille avec OpenGL (gl.h; glu.h; glut.h), DEV-C++ et le DevPack OpenGL.
    OpenGL est une librairie graphique 3D très évoluée et totalement portable offrant de nombreuses ressources aux programmeurs cherchant à faire de la synthèse d'images (pour les jeux par exemples).



    Je sais que ce pseudo est prétentieux mais je ne savais quoi mettre d'autre (à part Bill Gates peut-être !? )

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Tu peux nous passer un bout de code ?

    A mon avis c'est un problème de dépassement mais ça peut venir soit que le tableau est trop petit, soit que son remplissage est mal fait.
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  3. #3
    Débutant Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 68
    Points
    68
    Par défaut
    Ok, merci.
    Voici le code :
    LoaderOBJ.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    #include "LoaderOBJ.h"
     
    string ObjLoader::file = "";
     
    ObjLoader::ObjLoader(string fichier)
    {
    	file = fichier.c_str();
    	//Initialisation du Struct
    	info.v = 0;
    	info.vn = 0;
    	info.vt = 0;
    	info.f = 0;
     
    	//Initialisation des tableau de synthèse
    	float vX1[face()];
    	float vY1[face()];
    	float vZ1[face()];
    	float nX1[face()];
    	float nY1[face()];
    	float nZ1[face()];	
     
    	float vX2[face()];
    	float vY2[face()];
    	float vZ2[face()];
    	float nX2[face()];
    	float nY2[face()];
    	float nZ2[face()];
     
    	float vX3[face()];
    	float vY3[face()];
    	float vZ3[face()];
    	float nX3[face()];
    	float nY3[face()];
    	float nZ3[face()];
     
    	for(int init = 0; init<=face(); init++)
    	{
    		vX1[init] = 0;
    		vY1[init] = 0;
    		vZ1[init] = 0;
    		nX1[init] = 0;
    		nY1[init] = 0;
    		nZ1[init] = 0;	
     
    		vX2[init] = 0;
    		vY2[init] = 0;
    		vZ2[init] = 0;
    		nX2[init] = 0;
    		nY2[init] = 0;
    		nZ2[init] = 0;
     
    		vX3[init] = 0;
    		vY3[init] = 0;
    		vZ3[init] = 0;
    		nX3[init] = 0;
    		nY3[init] = 0;
    		nZ3[init] = 0;
    		cout<<init<<endl;
    	}
    	system("PAUSE");
     
    	//Fonctin de lancement d'initialisation du Loader :
    	obj();
    }
     
    ObjLoader::~ObjLoader()
    {
     
    }
     
    void ObjLoader::obj()
    {
    	ifstream fichier(file.c_str(), ios::in);
    	int len = (file.length()-1);
    	bool ext = false;
    	if(fichier == NULL)	//Si le fichier ne peut être ouvert et/ou lu.
    	{
    		cout<<"+=========================================+"<<endl;
    		cout<<"| /!\\ LE FICHIER NE PEUT ETRE OUVERT /!\\  |"<<endl;
    		cout<<"+=========================================+"<<endl;
    	}
    	else
    	{
    		if(file[len-2] != 'o' && file[len-1] != 'b' && file[len] != 'j')
    		{		
    			cout<<"+=========================================+"<<endl;
    			cout<<"|   /!\\ LE FICHIER N'EST PAS VALIDE /!\\   |"<<endl;
    			cout<<"+=========================================+"<<endl;
    			ext = false;
    		}
    		else
    		{
    			ext = true;
    		}
    	}
    	if(fichier != NULL && ext == true)//Execution normale de la lecture
    	{
    			//La variable 'first' récupère le premier caractère, si c'est 'v' alors il lit
    			//les coordonnées qui suivent puis les appliquent
    		bool boucle = true;
    		int Refx = 0;
    		int Refy = 0;
    		int Refz = 0;
    		int Norx = 0;
    		int Nory = 0;
    		int Norz = 0;
    		string Argx;
    		string Argy;
    		string Argz;
    		int iboucle = 0;
    		string x, y, z;
    		string first;
    		int nbr_v = vertex();
    		int nbr_vn = normal();
    		int nbr_f = face();
     
    		info.v = nbr_v;
    		info.vn = nbr_vn;
    		info.f = nbr_f;
    		cout<<"Vertex repertories : "<<info.v<<endl;
    		cout<<"Normals repertorie : "<<info.vn<<endl;
    		cout<<"Face totals : "<<info.f<<endl;
    		float Vx[nbr_v];
    		float Vy[nbr_v];
    		float Vz[nbr_v];
     
    		float VNx[nbr_vn];
    		float VNy[nbr_vn];
    		float VNz[nbr_vn];
     
    		//Entrer des information Vertex dans les array précédement initialisés
    		nbr_v = 0;
    		nbr_vn = 0;
    		fichier.clear();	//Réinitialise les 4 flags.
    		fichier.seekg(0, ios::beg);	//Met le 'curseur' a 0.
    		while(fichier.eof() != true)
    		{
    			fichier >> first;
    			if(first == "v")
    			{
    				fichier >> Vx[nbr_v] >> Vy[nbr_v] >> Vz[nbr_v];
    				nbr_v++;
    			}
    			if(first == "vn")
    			{
    				fichier >> VNx[nbr_vn] >> VNy[nbr_vn] >> VNz[nbr_vn];
    				nbr_vn++;
    			}
    			fichier.ignore(numeric_limits<int>::max(), '\n');	//Saut de ligne
    		}
     
    		fichier.clear();	//Réinitialise les 4 flags.
    		fichier.seekg(0, ios::beg);	//Met le 'curseur' a 0.
    		int i_struct = 0;
    		while(fichier.eof() != true)
    		{
    			Refx = 0;
    			Refy = 0;
    			Refz = 0;
    			Norx = 0;
    			Nory = 0;
    			Norz = 0;
    			iboucle = 0;
    			boucle = true;
    			fichier >> first;
    			if(first == "f")
    			{
    			//system("PAUSE");
    				fichier >> Argx >> Argy >> Argz;
    				//cout<<"Args : "<<Argx<<", "<<Argy<<", "<<Argz<<"."<<endl;
     
    				//========= X AND NORMAL=========
    					//Vertex
    					while(boucle)
    					{
    						if(Argx[iboucle] == '/')
    						{
    							boucle = false;
    						}
    						else
    						{
    							Refx = (Refx*10)+toint(Argx[iboucle]);
    						}
    						iboucle++;
    					}
    					//Normal
    					boucle = true;
    					while(boucle)
    					{
    						if(Argx[iboucle] == '/')
    						{
    							iboucle++;
    							while(boucle)
    							{
    								if(Argx[iboucle] == '\0')
    								{
    									boucle = false;
    								}
    								else
    								{
    									Norx = (Norx*10)+toint(Argx[iboucle]);
    								}
    								iboucle++;
    							}
    						}
    						iboucle++;
    					}
    					//Synthèse X :
    					cout<<i_struct<<" : "<<vX1[68]<<" : "<<Vx[Refx-1]<<endl;
     
    					vX1[68] = Vx[Refx-1];	//Vertex X
    					system("PAUSE");
    					/*vY1[i_struct] = Vy[Refx-1];	//Vertex Y
    					vZ1[i_struct] = Vz[Refx-1];	//Vertex Z
    					nX1[i_struct] = VNx[Norx-1];	//Normal X
    					nY1[i_struct] = VNy[Norx-1];	//Normal Y
    					nZ1[i_struct] = VNz[Norx-1];	//Normal Z*/
    					//glNormal3f(VNx[Norx-1], VNy[Norx-1], VNz[Norx-1]);
    					//glVertex3f(Vx[Refx-1], Vy[Refx-1], Vz[Refx-1]);
    				//========= Y AND NORMAL=========
    					//Vertex
    					boucle = true;
    					iboucle = 0;
    					while(boucle)
    					{
    						if(Argy[iboucle] == '/')
    						{
     
    							boucle = false;
    						}
    						else
    						{
    							Refy = (Refy*10)+toint(Argy[iboucle]);
    						}
    						iboucle++;
    					}
    					//normal
    					boucle = true;
    					while(boucle)
    					{
    						if(Argy[iboucle] == '/')
    						{
    							iboucle++;
    							while(boucle)
    							{
    								if(Argy[iboucle] == '\0')
    								{
    									boucle = false;
    								}
    								else
    								{
    									Nory = (Nory*10)+toint(Argy[iboucle]);
    								}
    								iboucle++;
    							}
    						}
    						iboucle++;
    					}
    					//Synthèse Y :
    					/*vX2[i_struct] = Vx[Refy-1];	//Vertex X
    					vY2[i_struct] = Vy[Refy-1];	//Vertex Y
    					vZ2[i_struct] = Vz[Refy-1];	//Vertex Z
    					nX2[i_struct] = VNx[Nory-1];	//Vertex X
    					nY2[i_struct] = VNy[Nory-1];	//Vertex Y
    					nZ2[i_struct] = VNz[Nory-1];	//Vertex Z*/
    					//glNormal3f(VNx[Nory-1], VNy[Nory-1], VNz[Nory-1]);
    					//glVertex3f(Vx[Refy-1], Vy[Refy-1], Vz[Refy-1]);
    				//========= Z AND NORMAL=========
    					//vertex
    					boucle = true;
    					iboucle = 0;
    					while(boucle)
    					{
     
    						if(Argz[iboucle] == '/')
    						{
    							boucle = false;
    						}
    						else
    						{
    							Refz = (Refz*10)+toint(Argz[iboucle]);
    						}
    						iboucle++;
    					}
    					//normal
    					boucle = true;
    					while(boucle)
    					{
    						if(Argz[iboucle] == '/')
    						{
    							iboucle++;
    							while(boucle)
    							{
    								if(Argz[iboucle] == '\0')
    								{
    									boucle = false;
    								}
    								else
    								{
    									Norz = (Norz*10)+toint(Argz[iboucle]);
    								}
    								iboucle++;
    							}
    						}
    						iboucle++;
    					}
    					//Synthèse Z :
    					/*vX3[i_struct] = Vx[Refz-1];	//Vertex X
    					vY3[i_struct] = Vy[Refz-1];	//Vertex Y
    					vZ3[i_struct] = Vz[Refz-1];	//Vertex Z
    					nX3[i_struct] = VNx[Norz-1];	//Normal X
    					nY3[i_struct] = VNy[Norz-1];	//Normal Y
    					nZ3[i_struct] = VNz[Norz-1];	//Normal Z*/
    					//glNormal3f(VNx[Norz-1], VNy[Norz-1], VNz[Norz-1]);
    					//glVertex3f(Vx[Refz-1], Vy[Refz-1], Vz[Refz-1]);
    				//===========END VERTEX AND NORMAL=========
    				i_struct++;
    			}
    			fichier.ignore(numeric_limits<int>::max(), '\n');	//Saut de ligne
    		}
    	}
    	fichier.close();
    }
     
    int ObjLoader::toint(char str)
    {
    	switch(str)
    	{
    		case '1':
    			return 1;
    			break;
    		case '2':
    			return 2;
    			break;
    		case '3':
    			return 3;
    			break;
    		case '4':
    			return 4;
    			break;
    		case '5':
    			return 5;
    			break;
    		case '6':
    			return 6;
    			break;
    		case '7':
    			return 7;
    			break;
    		case '8':
    			return 8;
    			break;
    		case '9':
    			return 9;
    			break;
    		default :
    		case '0':
    			return 0;
    			break;
    	}
    }
     
    void ObjLoader::draw()
    {
     
    	/*La fonction reécupère le donné qui se trouve dans les différent tableau de la Structure
    	Perso. Puis les met en application dans glNormal, glVertex,...
    	/
    	for(int i = 0; i<=info.f; i++)	//Tant qu'il y a des face on continue la boucle
    	{
    		glBegin(GL_TRIANGLES);
    			glNormal3f(*nX1[i], *nY1[i], *nZ1[i]);
    			glVertex3f(*vX1[i], *vY1[i], *vZ1[i]);
     
    			glNormal3f(*nX2[i], *nY2[i], *nZ2[i]);
    			glVertex3f(*vX2[i], *vY2[i], *vZ2[i]);
     
    			glNormal3f(*nX3[i], *nY3[i], *nZ3[i]);
    			glVertex3f(*vX3[i], *vY3[i], *vZ3[i]);
    		glEnd();
    	}*/
    }
     
    int ObjLoader::vertex()
    {
    	string lettre;
    	int vertex = 0;
    	//Ouverture du fichier pour obtenir le nombre de ligne Vertex
    	ifstream fichier(file.c_str(), ios::in);
     
    	while(!fichier.eof())
    	{
    		fichier >> lettre;
    		if(lettre == "v")
    		{
    			vertex++;
    		}
    		fichier.ignore(numeric_limits<int>::max(), '\n');	//Saut de ligne
    	}
    	fichier.close();
    	return vertex;
    }
     
    int ObjLoader::normal()
    {
    	string lettre;
    	int normal = 0;
    	//Ouverture du fichier pour obtenir le nombre de normal
    	ifstream fichier(file.c_str(), ios::in);
     
    	while(!fichier.eof())
    	{
    		fichier >> lettre;
    		if(lettre == "vn")
    		{
    			normal++;
    		}
    		fichier.ignore(numeric_limits<int>::max(), '\n');	//Saut de ligne	
    	}
    	fichier.close();
    	return normal;
    }
     
     
    int ObjLoader::texture()
    {
    	string lettre;
    	int texture = 0;
    	//Ouverture du fichier pour obtenir le nombre de normal
    	ifstream fichier(file.c_str(), ios::in);
     
    	while(!fichier.eof())
    	{
    		fichier >> lettre;
    		if(lettre == "vt")
    		{
    			texture++;
    		}
    		fichier.ignore(numeric_limits<int>::max(), '\n');	//Saut de ligne	
    	}
    	fichier.close();
    	return texture;
    }
     
    int ObjLoader::face()
    {
    	string lettre;
    	int face = 0;
    	//Ouverture du fichier pour obtenir le nombre de normal
    	ifstream fichier(file.c_str(), ios::in);
     
    	while(!fichier.eof())
    	{
    		fichier >> lettre;
    		if(lettre == "f")
    		{
    			face++;
    		}
    		fichier.ignore(numeric_limits<int>::max(), '\n');	//Saut de ligne	
    	}
    	fichier.close();
    	return face;
    }
    vertex() = Le nombre de ligne v dans le .obj
    ainsi que pour face(), etc...
    OpenGL est une librairie graphique 3D très évoluée et totalement portable offrant de nombreuses ressources aux programmeurs cherchant à faire de la synthèse d'images (pour les jeux par exemples).



    Je sais que ce pseudo est prétentieux mais je ne savais quoi mettre d'autre (à part Bill Gates peut-être !? )

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Je comprends pas, au début tu initialises tes tableaux, mais ensuite, tu ne les utilise plus ?

    (sinon pour initialiser plus proprement, tu peux utiliser memset)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    memset(vX1, 0, face() * sizeof(float));
    Tu as combien de faces à charger ?
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  5. #5
    Débutant Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 68
    Points
    68
    Par défaut
    Si je les utilise mais si il sont sous commentaire c'est parce que je voulais être sur que c'était bien les tableaux qui plante.

    Enfin Bref : J'ai 801 face a charger.
    OpenGL est une librairie graphique 3D très évoluée et totalement portable offrant de nombreuses ressources aux programmeurs cherchant à faire de la synthèse d'images (pour les jeux par exemples).



    Je sais que ce pseudo est prétentieux mais je ne savais quoi mettre d'autre (à part Bill Gates peut-être !? )

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Visiblement vX1, vX2 etc... sont membres de ta classe.

    Et dans le constructeur, les redéfinitions
    Doivent sûrement foutre le bordel.


    Essaye, dans l' entête de de déclarer ainsi
    Puis à l'initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vX1 = new float[face()];
    Et enfin dans le destructeur
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  7. #7
    Débutant Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 68
    Points
    68
    Par défaut
    J'ai déja essayer de faire des pointeur mais j'obtenais le même problème.
    Je vais réessayer.

    /***************** Après test *******************/
    Non sa ne marche pas, mais merci


    Tu n'aurai pas une idée de se qui pourrait faire planté en admettant que mon tableau soit correcte ? (Enfin si possible).
    OpenGL est une librairie graphique 3D très évoluée et totalement portable offrant de nombreuses ressources aux programmeurs cherchant à faire de la synthèse d'images (pour les jeux par exemples).



    Je sais que ce pseudo est prétentieux mais je ne savais quoi mettre d'autre (à part Bill Gates peut-être !? )

  8. #8
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Je ne voudrais pas que tu le prenne mal, mais il y a beaucoup de place pour le progrès...

    ce que tu devrais commencer par faire, c'est créer une "hiérarchie" cohérente des différentes données que tu manipule...

    Ainsi, sauf erreur, ta notion de base est le point en trois dimensions.

    Tu dois donc prévoir une structure qui te permette de représenter ce point.

    La notion juste au dessus du point est ce que l'on appelle un "vecteur": pour faire simple, nous pourrions dire qu'il s'agit d'un segment de droite, donc de quelque chose que l'on peut représenter sous la forme d' un point de départ et d'un point d'arrivée

    Juste après, vient la notion de face: elle peut être représentée, selon le cas qui t'est propre, soit par des points (chaque points représente un angle de la face) soit par des vecteurs (chaque vecteur représente un coté de la face)

    Puis viens la notion de volume: elle peut etre représentée, selon le cas qui t'est propre, soit par des points (représentant l'intersection des différentes faces qui composent le volume), soit par des vecteurs (représentant les arrêtes du volume) soit par des faces (représentant les faces du volume)

    Enfin, vient la notion de volume complexe: plusieurs volumes reliés entre eux pour représenter un objet particulier.

    (j'ai intentionnellement fait l'impasse sur les attributs d'affichage et les surfaces particulieres, telles que courbe de bezier etc )

    L'idée, une fois que tu as ces structures, c'est que tu crées la structure "la plus petite" pour l'intégrer dans celle "la plus grande"...

    Ainsi, si tu dois créer un volume complexe composé de deux cubes, tu va:
    1. déclarer ta variable de type "volume complexe"
    2. créer le premier cube, ce qui implique (par exemple) de
      • Créer le premier point en récupérant ses coordonnées X, Y et Z
      • intégrer le premier point dans le cube
      • Créer le premier point en récupérant ses coordonnées X, Y et Z
      • intégrer le premier point dans le cube
      • ...
      • Créer le huitième point en récupérant ses coordonnées X, Y et Z
      • intégrer le huitième point dans le cube
    3. intégrer le premier dans ton volume complexe
    4. créer le deuxième cube, ce qui implique (par exemple) de
      • Créer le premier point en récupérant ses coordonnées X, Y et Z
      • intégrer le premier point dans le cube
      • Créer le premier point en récupérant ses coordonnées X, Y et Z
      • intégrer le premier point dans le cube
      • ...
      • Créer le huitième point en récupérant ses coordonnées X, Y et Z
      • intégrer le huitième point dans le cube
    5. intégrer le deuxième cube dans ton volume complexe
    6. renvoyer ta structure complexe

    Le tout, en veillant à "déléguer les responsabilités"...

    Ainsi:
    • Si tu as créé une structure "point", il faut une fonction qui... permette de lire un point.
    • Si tu as une structure "volume" qui est composée de points, il faut une fonction qui permette de... lire le volume qui... appelle celle qui lit les points
    • ...

    De cette manière, tu obtiendra des fonctions "minimales", et donc bien plus facile à maintenir et à tester

    Je te conseille, en outre d'utiliser intensivement le principe du RAII (Ressource Acquisition Is Initialisation), qui te permettra, par exemple, de disposer d'un point au minimum correctement initialisé (même si c'est à une valeur par défaut) chaque fois que tu en crées un

    Enfin, je ne pourrais jamais assez insister sur le conseil de préférer l'utilisation des possibilités propres au C++ à toute alternative issue du C...

    Les classes vector ou boost::array présentent un tas d'avantages par rapport aux tableau C style

    Au passage
    (et toutes les déclarations similaires) ne devrait même pas compiler, car la déclaration "statique" d'un tableau nécessite de disposer d'une valeur constante connue à la compilation
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  9. #9
    Débutant Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 68
    Points
    68
    Par défaut
    Ok d'accord je vais essayer ce que tu as dis (ou du moins ce que j'ai compris ).

    Au fait pour Je suis obligé de mettre cela car il faut impérativement que je lise le fichier pour savoir quel est la taille du tableau, si tu as une autre solution je suis preneur.
    OpenGL est une librairie graphique 3D très évoluée et totalement portable offrant de nombreuses ressources aux programmeurs cherchant à faire de la synthèse d'images (pour les jeux par exemples).



    Je sais que ce pseudo est prétentieux mais je ne savais quoi mettre d'autre (à part Bill Gates peut-être !? )

  10. #10
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Citation Envoyé par jockyboss777 Voir le message
    Au fait pour Je suis obligé de mettre cela car il faut impérativement que je lise le fichier pour savoir quel est la taille du tableau, si tu as une autre solution je suis preneur.
    Ici, tu essaye de déclarer un tableau de réels dont la taille est inconnue à la compilation, car elle ne l'est qu'à l'exécution...

    Normalement, ton compilateur devrait déjà refuser cette instruction car il ne peut pas déclarer un tableau sans en connaitre la taille à la compilation

    La solution est donc, si tu veux travailler à la manière "C style", de passer par... l'allocation dynamique de la mémoire... avec tous les problèmes que cela sous entend...

    La solution "idéale" est donc de passer, comme je l'ai insidieusement sous entendu, par les classes propres au C++ que peuvent être vector (si, vraiment, tu n'a aucune idée au moment de la compilation du nombre de réels que tu devra gérer) ou boost::array (si tu sais pertinemment le nombre de réels qui devront être placé dans le tableau, ce qui n'est visiblement, à te lire, pas le cas )
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  11. #11
    Débutant Avatar de jockyboss777
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 257
    Points : 68
    Points
    68
    Par défaut
    Il me semble avoir compris ce que tu dis, mais j'ai un soucie (je ne sais pas si c'est moi qui est mal compris).
    Tu me dis qu'il faut que j'utilise des structure personnalisé (typedef struct), mais j'avais déjà essayer auparavant et j'ai été confronté au même problème : je ne sais pas combien de structure je dois déclaré.

    Tu voudrai pas expliquer a un boulet S.T.P

    Merci pour ton aide
    OpenGL est une librairie graphique 3D très évoluée et totalement portable offrant de nombreuses ressources aux programmeurs cherchant à faire de la synthèse d'images (pour les jeux par exemples).



    Je sais que ce pseudo est prétentieux mais je ne savais quoi mettre d'autre (à part Bill Gates peut-être !? )

Discussions similaires

  1. J'ai un TH dans mon tableau et j'aimerais faire en sorte qu'
    Par hstlaurent dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 12/09/2005, 17h41
  2. blocage avec mon like
    Par ouedmouss dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/09/2005, 14h20
  3. [Thread] Blocage dans mon programme
    Par Xo Sonic oX dans le forum EDT/SwingWorker
    Réponses: 4
    Dernier message: 18/06/2005, 17h12
  4. [XHTML 1.0] Transformer mon tableau en div
    Par stailer dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/05/2005, 18h50
  5. Réponses: 11
    Dernier message: 28/02/2005, 13h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo