Bonjour,
Je suis en train de faire de l'affichage 3D de pièces.
Après avoir affiché cette dite-piece de façon brute.
Ensuite, l'ai réussi à l'afficher via l'optimisation VBO
Le probleme est que quand je perds le focus de la fenetre sans forcement la mettre derriere une autre fenetre, le driver de la carte graphique ne réponds plus pendant quelques secondes avant de revenir.
Pourriez vous m'aider ?
Merci.
Flow
Mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 void LoadVBO() { Gl.glGenBuffersARB(1, out VBOObject.VBOid); Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER, VBOObject.count); Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB, (IntPtr)(VBOObject.count * 3 * sizeof(float)), VBOObject.xyz, Gl.GL_STATIC_DRAW_ARB); }
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 Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY); LoadVBO(); Gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); // Black Background Gl.glClearDepth(1.0f); // Depth Buffer Setup Gl.glDepthFunc(Gl.GL_LEQUAL); // The Type Of Depth Testing (Less Or Equal) Gl.glEnable(Gl.GL_DEPTH_TEST); // Enable Depth Testing Gl.glShadeModel(Gl.GL_SMOOTH); // Select Smooth Shading Gl.glHint(Gl.GL_PERSPECTIVE_CORRECTION_HINT, Gl.GL_NICEST); // Set Perspective Calculations To Most Accurate Gl.glEnable(Gl.GL_TEXTURE_2D); // Enable Textures Gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f); // Set The Color To White Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, VBOObject.count); Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, null); while (!toquit) { DrawGLScene();// Loop That Runs While done = false Application.DoEvents(); // Process Events bool res = Gdi.SwapBuffers(hDC); } Gl.glDisableClientState(Gl.GL_VERTEX_ARRAY);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 private void DrawGLScene() { Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); Gl.glLoadIdentity(); Glu.gluLookAt(212, 60, 194, 186, 55, 171, 0, 1, 0); Gl.glRotatef(xv, 1f, 0f, 0f); Gl.glRotatef(yv, 0f, 1f, 0f); Gl.glRotatef(zv, 0f, 0f, 1f); Gl.glDrawArrays(Gl.GL_LINES, 0, VBOObject.count); }
Partager