Bonjour,

je travaille actuellement sur un programme 3D "une scéne 3D (maison)" , et je veux savoir comment créer un menu avec des boutons comme (fermerPorte ,ouvrirePorte ,Quitter ,afficherLaScene ,etc...) . s'ils vous plais aidez moi car j'ai tout ça dans mon ProjetFinEtudes . Merci d'avance

et voici le main de mon programme :
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
464
465
466
467
468
469
470
 
#include "CMur.h"
//#include "Load_Texture.h"
#include "FreeFlyCamera.h"
 
#define FPS 100
#define LARGEUR_FENETRE 640
#define HAUTEUR_FENETRE 480
#define HAvFen 3
#define HApFen 1
#define SelonX -90
#define SelonY 0
 
//Atributs: w,h,t,aX,aY,aZ,pX,pY,pZ,cR,cG,cB,tF,tD
/// *****************************************************************************************
/// *****************************************************************************************
/// Les murs selon Y
CMur M0(10,7,0.3,SelonY);
//
/*De base, le mur qui a une fenetre */
CMur M1(12,HAvFen,0.3, SelonY,0,0, 0,10);//dernière valeur est le WIDTH du dernier mur ici M0
CMur M2(4,3,0.3, SelonY,0,0, 0,10,HAvFen);
CMur M3(4,3,0.3, SelonY,0,0, 0,18,HAvFen);//18=posM2+wF+wM2
CMur M4(12,HApFen,0.3, SelonY,0,0, 0,10,6);
/* ********************************* */
// Porte pricipale
CMur M5(3,5,0.3, SelonY,0,0, 0,22);
CMur M6(3,5,0.3, SelonY,0,0, 0,29);
CMur M7(10,2,0.3, SelonY,0,0, 0,22,5);
//
CMur M8(14,HAvFen,0.3, SelonY,0,0, 0,32);
CMur M9(4,3,0.3, SelonY,0,0, 0,32,HAvFen);
CMur M10(4,3,0.3, SelonY,0,0, 0,42,HAvFen);
CMur M11(14,HApFen,0.3, SelonY,0,0, 0,32,6);
//
CMur M12(18,HAvFen,0.3, SelonY,0,0, 0,46);
CMur M13(5,3,0.3, SelonY,0,0, 0,46,HAvFen);
CMur M14(6,3,0.3, SelonY,0,0, 0,58,HAvFen);
CMur M15(18,HApFen,0.3, SelonY,0,0, 0,46,6);
//Garage
CMur M16(3,5,0.3, SelonY,0,0, 0,64);//M15.GetPosition().y + M15.GetWidth()
CMur M17(3,5,0.3, SelonY,0,0, 0,77);
CMur M18(16,2,0.3, SelonY,0,0, 0,64,5);
//
CMur M19(10,7,0.3,SelonY,0,0 ,8);
//porte du bureau
CMur M20(7,5,0.3, SelonY,0,0, 18);
CMur M20_1(0);
CMur M21(10,2,0.3, SelonY,0,0, 18,0,5);
//
CMur M22(12,7,0.3, SelonY,0,0, 18,10);
//porte ch 4
CMur M23(10,5,0.3, SelonY,0,0, 14,32);
CMur M24(1,5,0.3, SelonY,0,0, 14,45);
CMur M25(14,2,0.3, SelonY,0,0, 14,32,5);
//mur ch 1
CMur M26(18,7,0.3, SelonY,0,0, 18,46);
//
CMur M27(16,7,0.3, SelonY,0,0, 18,64);
//
CMur M28(6,HAvFen,0.3, SelonY,0,0, 26);
//
CMur M29(6,HAvFen,0.3, SelonY,0,0, 26,16);
//
CMur M30(18,7,0.3, SelonY,0,0, 26,22);
//porte ch 3
CMur M31(1,5,0.3, SelonY,0,0, 30,40);
CMur M32(20,5,0.3, SelonY,0,0, 30,44);
CMur M33(24,2,0.3, SelonY,0,0, 30,40,5);
//
CMur M34(22,HAvFen,0.3, SelonY,0,0, 42);
CMur M35(8,3,0.3, SelonY,0,0, 42,0,HAvFen);
CMur M36(8,3,0.3, SelonY,0,0, 42,14,HAvFen);
CMur M37(22,HApFen,0.3, SelonY,0,0, 42,0,6);
//
CMur M38(18,HAvFen,0.3, SelonY,0,0, 42,22);
CMur M39(6.5,3,0.3, SelonY,0,0, 42,22,HAvFen);
CMur M40(6.5,3,0.3, SelonY,0,0, 42,33.5,HAvFen);
CMur M41(18,HApFen,0.3, SelonY,0,0, 42,22,6);
//
CMur M42(24,HAvFen,0.3, SelonY,0,0, 42,40);
CMur M43(12,3,0.3, SelonY,0,0, 42,40,HAvFen);
CMur M44(7,3,0.3, SelonY,0,0, 42,57,HAvFen);
CMur M45(24,HApFen,0.3, SelonY,0,0, 42,40,6);
 
/// Les murs selon X
CMur M46(8,7,0.3, SelonX);// la posX du mur = sonWidth + saPosX
//
CMur M47(10,HAvFen,0.3, SelonX,0,0 ,8);
CMur M48(3.5,3,0.3, SelonX,0,0, 8,0,HAvFen);
CMur M49(3.5,3,0.3, SelonX,0,0, 14.5,0,HAvFen);
CMur M50(10,HApFen,0.3, SelonX,0,0, 8,0,6);
//mur gauche du salon
CMur M51(24,HAvFen,0.3, SelonX,0,0 ,18);
CMur M52(12,3,0.3, SelonX,0,0, 18,0,HAvFen);
CMur M53(6,3,0.3, SelonX,0,0, 36,0,HAvFen);
CMur M54(24,HApFen,0.3, SelonX,0,0, 18,0,6);
//
CMur M55_1(0);
CMur M55(15,5,0.3, SelonX,0,0 ,3,10);
CMur M56(18,2,0.3, SelonX,0,0 ,0,10,5);
//mur de la porte de cuisine
CMur M57(14,5,0.3, SelonX,0,0 ,0,22);
CMur M58(1,5,0.3, SelonX,0,0 ,17,22);
CMur M59(18,2,0.3, SelonX,0,0 ,0,22,5);
//mur droit du salon
CMur M60(16,7,0.3, SelonX,0,0 ,26,22);
//
CMur M61(14,7,0.3, SelonX,0,0 ,0,32);
//
CMur M62_1(0);
CMur M62(13,5,0.3, SelonX,0,0 ,29,40);
CMur M63(16,2,0.3, SelonX,0,0 ,26,40,5);
//mur de la porte du ch 1
CMur M64(15,5,0.3, SelonX,0,0 ,0,46);
CMur M64_1(0);
CMur M65(18,2,0.3, SelonX,0,0 ,0,46,5);
//mur de la porte du salle du bain
CMur M66(1,5,0.3, SelonX,0,0 ,18,46);
CMur M67(8,5,0.3, SelonX,0,0 ,22,46);
CMur M68(12,2,0.3, SelonX,0,0 ,18,46,5);
//
CMur M69(21,7,0.3, SelonX,0,0 ,-3,64);
//mur de la fenetre du salle bu bain
CMur M70(12,HAvFen,0.3, SelonX,0,0 ,18,64);
CMur M71(4,3,0.3, SelonX,0,0 ,18,64,HAvFen);
CMur M72(4,3,0.3, SelonX,0,0 ,26,64,HAvFen);
CMur M73(12,HApFen,0.3, SelonX,0,0 ,18,64,6);
//
CMur M74(12,7,0.3, SelonX,0,0 ,30,64);
//
CMur M75(21,7,0.3, SelonX,0,0 ,-3,80);
//
/* *************************************/
//    CMur M1(w,3,0.3, Selon,0,0, x,y);
//    CMur M2((w-wF)/2,3,0.3, Selon,0,0, x,y,3);
//    CMur M3((w-wF)/2,3,0.3, Selon,0,0, x,y+wF,3);
//    CMur M4(w,1,0.3, Selon,0,0, x,y,6);
/* ************************************/
/// *****************************************************************************************
/// *****************************************************************************************
void DessinerRepere3D(unsigned int echelle=30);
void DessinerPlan();
void Dessiner();
void stop();
/// //////////////////////////////////////////////////////
/// /////////////////////////////////////////////////////
bool curseur=true;
FreeFlyCamera * camera;
 
 
int main(int argc, char *argv[])
{
    SDL_Event event;
    const Uint32 time_per_frame = 1000/FPS;
    unsigned int width = LARGEUR_FENETRE;
    unsigned int height = HAUTEUR_FENETRE;
 
    Uint32 last_time,current_time,elapsed_time; //for time animation
    Uint32 start_time,stop_time; //for frame limit
 
    SDL_Init(SDL_INIT_VIDEO);
    atexit(stop);
 
    SDL_WM_SetCaption("V3 SweetHome", NULL);
    SDL_SetVideoMode(width, height, 32, SDL_OPENGL|SDL_RESIZABLE);
//    initFullScreen(&width,&height); // pour agrandir l'écran dés le lancement !
 
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity( );
    gluPerspective(70,(double)width/height,0.001,1000);
 
/// **********************
//if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, MIX_DEFAULT_CHANNELS, 1024) == -1) //Initialisation de l'API Mixer
//    {
//         printf("%s", Mix_GetError());
//    }
//    Mix_Music *musique; //Création du pointeur de type Mix_Music
//    musique = Mix_LoadMUS("m.mp3"); //Chargement de la musique
//    Mix_PlayMusic(musique, -1); //Jouer infiniment la musique
/// **********************
 
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_DEPTH_TEST);
    glCullFace( GL_BACK );
    glEnable(GL_CULL_FACE);
 
    camera = new FreeFlyCamera(Vector3D(-20,80,10));
    last_time = SDL_GetTicks();
 
/// ************************************************************************************///
/// ************************************************************************************///
    M0.SetTexture("mur_traditionnel.jpg","toit.jpg");
    M1.SetTexture("concrete.jpg","floor.jpg");
    M2.SetTexture("concrete.jpg","floor.jpg");
    M3.SetTexture("concrete.jpg","floor.jpg");
    M4.SetTexture("concrete.jpg","floor.jpg");
    M5.SetTexture("metal.jpg","floor.jpg");
    M6.SetTexture("metal.jpg","floor.jpg");
    M7.SetTexture("metal.jpg","floor.jpg");
    M8.SetTexture("mur_traditionnel.jpg","floor.jpg");
    M9.SetTexture("mur_traditionnel.jpg","floor.jpg");
    M10.SetTexture("mur_traditionnel.jpg","floor.jpg");
    M11.SetTexture("mur_traditionnel.jpg","floor.jpg");
    M12.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M13.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M14.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M15.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M16.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M17.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M18.SetTexture("metal.jpg","floor.jpg");
 
    M19.SetTexture("metal.jpg","floor.jpg");
 
    M20.SetTexture("metal.jpg","floor.jpg");
    M21.SetTexture("metal.jpg","floor.jpg");
 
    M22.SetTexture("metal.jpg","floor.jpg");
 
    M23.SetTexture("metal.jpg","floor.jpg");
    M24.SetTexture("metal.jpg","floor.jpg");
    M25.SetTexture("metal.jpg","floor.jpg");
 
    M26.SetTexture("metal.jpg","floor.jpg");
 
    M27.SetTexture("metal.jpg","floor.jpg");
 
    M28.SetTexture("metal.jpg","floor.jpg");
 
    M29.SetTexture("metal.jpg","floor.jpg");
 
    M30.SetTexture("metal.jpg","floor.jpg");
 
    M31.SetTexture("metal.jpg","floor.jpg");
    M32.SetTexture("metal.jpg","floor.jpg");
    M33.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M34.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M35.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M36.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M37.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M38.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M39.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M40.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M41.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M42.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M43.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M44.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M45.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M46.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M47.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M48.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M49.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M50.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M51.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M52.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M53.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M54.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M55.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M56.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M57.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M58.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M59.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M60.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M61.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M62.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M63.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M64.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M65.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M66.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M67.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M68.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M69.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M70.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M71.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M72.SetTexture("mur_traditionnel.jpg","metal.jpg");
    M73.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M74.SetTexture("mur_traditionnel.jpg","metal.jpg");
 
    M75.SetTexture("mur_traditionnel.jpg","metal.jpg");
/// ************************************************************************************///
    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_c:
                    takeScreenshot("CaptureEcran.bmp");
                    break;
                    case SDLK_r:
                        camera->setPosition(Vector3D(30,30,20));
                    break;
                    case SDLK_p:
                        if(curseur==true)
                        {
                            SDL_WM_GrabInput(SDL_GRAB_OFF);
                            SDL_ShowCursor(SDL_ENABLE);
                            curseur=false;
                        }else
                        {
                            SDL_WM_GrabInput(SDL_GRAB_ON);
                            SDL_ShowCursor(SDL_DISABLE);
                            curseur=true;
                        }
 
                    break;
                    case SDLK_ESCAPE:
                    exit(0);
                    break;
 
                    default :
                    camera->OnKeyboard(event.key);
                }
                break;
                case SDL_KEYUP:
                camera->OnKeyboard(event.key);
                break;
                case SDL_MOUSEMOTION:
                camera->OnMouseMotion(event.motion);
                break;
                case SDL_MOUSEBUTTONUP:
                case SDL_MOUSEBUTTONDOWN:
                camera->OnMouseButton(event.button);
                break;
            }
        }
 
        current_time = SDL_GetTicks();
        elapsed_time = current_time - last_time;
        last_time = current_time;
 
        camera->animate(elapsed_time);
 
        Dessiner();
 
        stop_time = SDL_GetTicks();
        if ((stop_time - last_time) < time_per_frame)
        {
            SDL_Delay(time_per_frame - (stop_time - last_time));
        }
 
    }
 
    return 0;
}
 
void Dessiner()
{
 
 
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity( );
    glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    glEnable(GL_DEPTH_TEST);
 
    camera->look();
 
 
    M0.CreeMur();
    CMur::CreeMurAvecFenetre(M1,M2,M3,M4);
    CMur::CreeMurAvecPorte(M5,M6,M7);
    CMur::CreeMurAvecFenetre(M8,M9,M10,M11);
    CMur::CreeMurAvecFenetre(M12,M13,M14,M15);
    CMur::CreeMurAvecPorte(M16,M17,M18);
    M19.CreeMur();
    CMur::CreeMurAvecPorte(M20,M20_1,M21);
    M22.CreeMur();
    CMur::CreeMurAvecPorte(M23,M24,M25);
    M26.CreeMur();
    M27.CreeMur();
    M28.CreeMur();
    M29.CreeMur();
    M30.CreeMur();
    CMur::CreeMurAvecPorte(M31,M32,M33);
    CMur::CreeMurAvecFenetre(M34,M35,M36,M37);
    CMur::CreeMurAvecFenetre(M38,M39,M40,M41);
    CMur::CreeMurAvecFenetre(M42,M43,M44,M45);
    M46.CreeMur();
    CMur::CreeMurAvecFenetre(M47,M48,M49,M50);
    CMur::CreeMurAvecFenetre(M51,M52,M53,M54);
    CMur::CreeMurAvecPorte(M55_1,M55,M56);
    CMur::CreeMurAvecPorte(M57,M58,M59);
    M60.CreeMur();
    M61.CreeMur();
    CMur::CreeMurAvecPorte(M62_1,M62,M63);
    CMur::CreeMurAvecPorte(M64,M64_1,M65);
    CMur::CreeMurAvecPorte(M66,M67,M68);
    M69.CreeMur();
    CMur::CreeMurAvecFenetre(M70,M71,M72,M73);
    M74.CreeMur();
    M75.CreeMur();
 
 
 
    DessinerRepere3D();
    DessinerPlan();
 
    glFlush();
    SDL_GL_SwapBuffers();
}
 
void DessinerPlan()
{
    /* Grand plan */
    glPushMatrix();
 
            glColor3ub(222,222,111);
        glBegin(GL_QUADS);
            glVertex3d(-100,-100,0);
            glVertex3d(100,-100,0);
            glVertex3d(100,100,0);
            glVertex3d(-100,100,0);
        glEnd();
 
    glPopMatrix();
}
void DessinerRepere3D(unsigned int echelle)
{
    glPushMatrix();
 
        glScalef(echelle,echelle,echelle);
        glLineWidth(5);
 
        glBegin(GL_LINES);
                glColor3ub(255,0,0);
            glVertex3i(0,0,0);
            glVertex3i(1,0,0);
                glColor3ub(0,255,0);
            glVertex3i(0,0,0);
            glVertex3i(0,1,0);
                glColor3ub(0,0,255);
            glVertex3i(0,0,0);
            glVertex3i(0,0,1);
        glEnd();
 
    glPopMatrix();
}
 
void stop()
{
    delete camera;
    SDL_Quit();
}